有没有办法检索C#app的当前内存使用情况?

时间:2009-01-20 12:44:20

标签: c# .net garbage-collection clr memory-management

我正在自动执行一些分析任务,并希望实时记录堆空间和生成大小。 profiling API对于我需要的东西来说似乎非常复杂,它似乎倾听个人分配和收藏,这对我来说并不重要。分析工具当然是一个很好的帮助,但我一直在寻找一个更灵活,可编程的界面。

3 个答案:

答案 0 :(得分:39)

“当前内存使用”这个术语有点松散定义。你的意思是工作集吗?无论它意味着什么,您都可以使用流程类中的VirtualMemorySizeWorkingSetPrivateMemorySize等不同属性来检索它。

long workingSet = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64;

答案 1 :(得分:6)

对于很多这样的东西都有性能计数器,如果你不能使用Perfmon,你可以通过Diagnostics API访问计数器。

答案 2 :(得分:3)

一旦我不得不在遗留代码中发现内存泄漏,我就遇到了这个解决方案: 开始"任务列表"使用适当的参数作为进程,并从流或文件中读取输出。

e.g。

tasklist /fi "IMAGENAME eq notepad++.exe" /FO CSV /NH

输出是:

"notepad++.exe","7132","Console","1","21.004 K"

不是那么优雅,但在Windows上使用任何编程语言都没有额外的依赖性(在我的例子中是C ++ / Qt)。