为了调试目的,我编写了这个小的静态方法:
public static long CheckMemory(long maxMemorySizeBytes)
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
var usedMemoryBytes = Process.GetCurrentProcess().VirtualMemorySize64;
if (usedMemoryBytes > maxMemorySizeBytes)
Debugger.Break();
return usedMemoryBytes;
}
出于某种原因,VirtualMemorySize64
返回的内存数量比Visual Studio Diagnostic Tools窗口和任务管理器显示的内存数量要多得多。就我现在运行的特定示例而言,以下是数字:
- Diagnostic Tools:约250 MB
- 任务管理器:约120 MB
- VirtualMemorySize64:约1100 MB
为什么会有如此大的差异,如何正确跟踪应用程序内部的内存使用情况?
Process.PrivateMemorySize64
,而工作集是Process.WorkingSet64
。 - relatively_random