36

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

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

有人可以给我一些帮助,我怎样才能得到用过的内存。

4

4 回答 4

44

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

long memory = GC.GetTotalMemory(true);
于 2012-12-25T17:11:09.957 回答
20

你可以试试GC.GetTotalMemory

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


或者

using System.Diagnostics;

Process currentProc = Process.GetCurrentProcess();

获得对当前进程的引用后,您可以通过读取 PrivateMemorySize64 属性来确定其内存使用情况。

long memoryUsed = currentProc.PrivateMemorySize64;
于 2012-12-25T17:12:59.977 回答
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

于 2012-12-25T17:45:19.563 回答
-4

为什么不只使用 TaskManager 或更高级的Sysinternals工具监视内存使用情况,并且只有在您确定哪些工作流异常提高了内存使用情况之后,然后使用 CLR Profiler 或其他工具对应用程序进行分析。

于 2012-12-25T17:11:19.330 回答