我在这个地方是一个新手,并与C#移动启动。 现在,我正在C#手持设备平台上工作。 所以,我有一些问题要问如何获得内存使用。 我已经尝试GC.GetTotalMemory()并获取GC使用的分配的内存。 但是,我可以用它来估计我的应用程序分配了多less内存。 我想这可能是不正确的。 然后,我试图谷歌search任何参考或类或任何东西用于检查在Windows CE的内存,但我发现只有在另一个平台,不支持我正在做的事情。
在此先感谢,斯托
抱歉,我离开这个职位。
我非常感谢任何回答我的问题并关注这篇文章的人。
现在,通过在我的项目中实现“OpenNetCF”引用,我获得了所需的全部内容。
再次感谢 ;)
根据文档, GC.GetTotalMemory
返回
一个数字,是当前在托管内存中分配的字节数的最佳可用近似值。
这对一些开发者来说有点误导/混淆,尤其是那些来自本土世界的开发者。 它会告诉你GC已经在内部分配了多少内存,但不知道从系统中分配给整个堆(即分配和未分配的管理内存)的实际内存。
它也不报告原生分配。 如果你使用大量的GDI对象(位图,画笔等),那么这些内存分配也是非常巨大的。 在一个位图的情况下,它的管理占用空间实际上远小于其本地空间。
如果您对您的托管应用程序对整体系统资源的实际影响感兴趣,则需要查询操作系统,并询问需要多少物理和虚拟内存来获得实际感受(发现GC.GetTotalMemory为事实上相对毫无用处)。 P /调用GlobalMemoryStatus给你你想要的。 MSDN包含一个例子 。
尝试这个。 它会给你我想要的,包括你用GC.GetTotalMemory()。 你将不得不用你自己的文字标签或用你想要的方式来使用它。 你将不得不使用P / Invoke,但…
public struct MEMORYSTATUS { public UInt32 dwLength; public UInt32 dwMemoryLoad; public UInt32 dwTotalPhys; public UInt32 dwAvailPhys; public UInt32 dwTotalPageFile; public UInt32 dwAvailPageFile; public UInt32 dwTotalVirtual; public UInt32 dwAvailVirtual; } [DllImport("coredll.dll")] private static extern void GlobalMemoryStatus(out MEMORYSTATUS lpBuffer); public static void GetGlobalMemoryStatus(out UInt32 dwTotal, out UInt32 dwAvail, out UInt32 dwProcTotal, out UInt32 dwProcAvail) { MEMORYSTATUS status = new MEMORYSTATUS(); output.Length = (UInt32)System.Runtime.InteropServices.Marshal.SizeOf(output); GlobalMemoryStatus(out status); dwTotal = status.dwTotalPhys; dwAvail = status.dwAvailPhys; dwProcTotal = status.dwTotalVirtual; dwProcAvail = status.dwAvailVirtual; } private void UpdateMemoryDisplay() { /*************************************************************************/ bool IsTotalGB = false; bool IsUsedGB = false; uint TotalRamMemory; uint AvailRamMemory; uint ProcTotalRamMemory; uint ProcAvailRamMemory; GetGlobalMemoryStatus(out TotalRamMemory, out AvailRamMemory, out ProcTotalRamMemory, out ProcAvailRamMemory); float TotalMB = (float)((float)TotalRamMemory / (1024 * 1024)); float UsedMB = TotalMB - (float)((float)AvailRamMemory / (1024 * 1024)); int RamPercent = (int)((UsedMB / TotalMB) * 100.0); if (1000 < TotalMB) { TotalMB /= 1000; IsTotalGB = true; } if (1000 < UsedMB) { UsedMB /= 1000; IsUsedGB = true; } this.RamMemMinLbl.Text = UsedMB.ToString("0.0") + ((false != IsUsedGB) ? "GB" : "MB"); this.RamMemMaxLbl.Text = TotalMB.ToString("0.0") + ((false != IsTotalGB) ? "GB" : "MB"); this.RamMemPercent.Current = RamPercent; IsUsedGB = false; TotalMB = (float)((float)ProcTotalRamMemory / (1024 * 1024)); UsedMB = TotalMB - (float)((float)ProcAvailRamMemory / (1024 * 1024)); if (1000 < UsedMB) { UsedMB /= 1000; IsUsedGB = true; } this.ProcRamMemMinLbl.Text = UsedMB.ToString("0.0") + ((false != IsUsedGB) ? "GB" : "MB"); IsUsedGB = false; UsedMB = (float)((float)GC.GetTotalMemory(false) / (1024 * 1024)); if (1000 < UsedMB) { UsedMB /= 1000; IsUsedGB = true; } this.GCMemMinLbl.Text = UsedMB.ToString("0.0") + ((false != IsUsedGB) ? "GB" : "MB"); /*************************************************************************/ }