监控应用程序内存使用情况的正确方法是什么?出于调试目的,我编写了这个小静态方法:publicstaticlongCheckMemory(longmaxMemorySizeBytes){GC.Collect();GC.WaitForPendingFinalizers();GC.收集();varusedMemoryBytes=Process.GetCurrentProcess().VirtualMemorySize64;如果(usedMemoryBytes>maxMemorySizeBytes)Debugger.Break();返回使用的内存字节;出于某种原因,VirtualMemorySize64不断返回比VisualStudio诊断工具窗口显示更多的内存,以及任务管理器显示的内容。对于我现在正在运行的具体示例,以下是数字:为什么会有如此大的差异,以及如何从应用程序本身内部正确跟踪内存使用情况?VirtualMemorySize测量进程使用的所有虚拟内存。这包括计算机上所有其他进程共享的页面。.NET程序中包含OS、CLR、Jitter和ngen-ed框架程序集。诊断工具——显示应用程序“私有字节”指标的实时图表。PrivateBytes是进程分配的内存总量的度量,不包括与其他进程共享的内存。在任务管理器中,默认情况下您会看到“私有工作集”内存,这是一个进程使用的不能在其他进程之间共享的内存量。所以:如果你想知道你使用了多少内存,检索进程的VirtualMemorySize、WorkingSet和PrivateBytes。如果将所有进程的VirtualMemorySize加起来,您可能会发现它添加的内存比您实际拥有的多。那是因为那些内存映射文件、EXE、DLL等可以在进程间共享;RAM中的同一个物理页可以同时在多个进程的地址空间中被访问。以上就是C#学习教程:监控应用程序内存使用情况的正确方法是什么?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
