如何获取应用程序使用的内存量

Ben*_*ual 28 c# memory-leaks memory-management

可能重复:
如何在C#中获取或使用内存

我想在我的应用程序的状态栏中可视化我的应用程序使用的内存.我正在寻找记忆漏洞 - 但我不知道在哪里.现在,我的想法是在状态栏中可视化使用的内存,以便在我使用应用程序时找到它,找到问题发生的部分,然后我可以对其进行分析.

有人可以给我一些帮助,我怎样才能得到用过的记忆.

gen*_*az1 37

您可以使用以下函数(true参数告诉GC首先执行集合):

long memory = GC.GetTotalMemory(true);
Run Code Online (Sandbox Code Playgroud)

  • 如副本中所述,请注意:此解决方案仅查看托管堆.要获得完整的流程大小,请参阅:/sf/answers/52541681/ (4认同)

Rah*_*jan 14

你可以尝试GC.GetTotalMemory:

它检索当前认为要分配的字节数.一个参数指示此方法是否可以在返回之前等待一个短的间隔>,以允许系统收集垃圾并完成>对象.


要么

using System.Diagnostics;

Process currentProc = Process.GetCurrentProcess();
Run Code Online (Sandbox Code Playgroud)

一旦引用了当前进程,就可以通过读取PrivateMemorySize64属性来确定其内存使用情况.

long memoryUsed = currentProc.PrivateMemorySize64;
Run Code Online (Sandbox Code Playgroud)

  • 他们是一样的吗? (2认同)

Fab*_*bio 5

如果要监视应用程序使用的内存,则无需为此编写代码。只需使用 Windows 中的性能计数器(http://www.codeproject.com/Articles/8590/An-Introduction-To-Performance-Counters)。他们将通过图表提供您需要的信息!有很多内存计数器(http://msdn.microsoft.com/en-us/library/x2tyfybc.aspx),其中之一将包含您需要的数据,我想它会帮助您找出何时应用程序开始使用比应有的更多内存。

但是,如果您确实需要将此信息放入您的应用程序中,您仍然可以使用性能计数器。.NET 在 System.Diagnostics 命名空间中有类来访问它们的数据。请参阅此示例:https : //weblog.west-wind.com/posts/2014/Sep/27/Capturing-Performance-Counter-Data-for-a-Process-by-P​​rocess-Id