Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何确定我的应用程序使用的全部内存?_C#_Memory Management - Fatal编程技术网

C# 如何确定我的应用程序使用的全部内存?

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

我的应用程序有10个锯齿状数组和5个列表。平均值用不同的数据填充,例如双精度或字符串类型。因此,我知道我的应用程序必须消耗大量内存,但如何确定使用的内存总量

我读过使用GC.GetTotalMemory的书,所以我做的第一件事是这样的:

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
表示返回前先收集)。