C# 如何确定我的应用程序使用的全部内存?
我的应用程序有10个锯齿状数组和5个列表。平均值用不同的数据填充,例如双精度或字符串类型。因此,我知道我的应用程序必须消耗大量内存,但如何确定使用的内存总量 我读过使用GC.GetTotalMemory的书,所以我做的第一件事是这样的:C# 如何确定我的应用程序使用的全部内存?,c#,memory-management,C#,Memory Management,我的应用程序有10个锯齿状数组和5个列表。平均值用不同的数据填充,例如双精度或字符串类型。因此,我知道我的应用程序必须消耗大量内存,但如何确定使用的内存总量 我读过使用GC.GetTotalMemory的书,所以我做的第一件事是这样的: var initialMemory = System.GC.GetTotalMemory(true); many line of code ... .. var finalMemory = System.GC.GetTotalMemory(true); var
var initialMemory = System.GC.GetTotalMemory(true);
many line of code
...
..
var finalMemory = System.GC.GetTotalMemory(true);
var consumption = finalMemory - initialMemory;
所有代码都在一个函数中,该函数调用其函数,但最终结果为零。我看到,finalMemory
也为零,那么首先发生了什么?初始内存有一个数字,但最终内存没有
是不是
System.GC.GetTotalMemory
是查找我的应用程序使用的内存总量的最佳选项?您可以执行以下操作:
using System.Diagnostics;
...
Process.GetCurrentProcess().VirtualMemorySize64
这将为您提供在任务管理器之类的地方可以看到的数字。但是,这包括非托管开销内存使用System.GC.GetTotalMemory(true)
将提供垃圾收集器使用的实际内存量(.net内存使用量)。我曾经使用过:在my global.asax文件中:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
if (WebConfigSettings.ShowMemoryUsage)
{
GC.Collect();
logger.Debug(string.Format("Total memory: {0:###,###,###,##0} bytes", GC.GetTotalMemory(true)));
}
}
这里有一个链接,你也可以利用 请看这篇文章。。有很多选项WMI非常强大 如果WMI不是您正在查看和/或想要使用的。。然后看看性能计数器
下面是一个如何使用它们的示例GC只知道托管内存,而托管内存只是应用程序使用的内存的一部分。您可以通过WMI google search使用WMI来实现这一点,以获取总内存。我强烈推荐Red Gates memory profiler:这是一个链接,您也可以查看。。我正在查找更多信息,并询问如何获取物理内存、使用的分页内存和虚拟内存,我想知道这是应用程序使用的内存还是其他内存?仅供参考,如果将
true
传递给GetTotalMemory,您无需在之前收集(参数true
表示返回前先收集)。