【发布时间】:2010-10-02 10:43:37
【问题描述】:
我正在自动化一些分析任务,并希望实时记录堆空间和生成大小。 profiling API 对于我需要的东西来说似乎非常复杂,而且它似乎在监听个人分配和集合,这对我来说并不重要。分析工具当然有很大的帮助,但我一直在寻找更灵活、可编程的界面。
【问题讨论】:
标签: c# .net garbage-collection clr memory-management
我正在自动化一些分析任务,并希望实时记录堆空间和生成大小。 profiling API 对于我需要的东西来说似乎非常复杂,而且它似乎在监听个人分配和集合,这对我来说并不重要。分析工具当然有很大的帮助,但我一直在寻找更灵活、可编程的界面。
【问题讨论】:
标签: c# .net garbage-collection clr memory-management
一旦我不得不在遗留代码中发现内存泄漏,我就遇到了这个解决方案: 以适当的参数启动“tasklist”作为进程,并从流或文件中读取输出。
例如
tasklist /fi "IMAGENAME eq notepad++.exe" /FO CSV /NH
输出是:
"notepad++.exe","7132","Console","1","21.004 K"
不是那么优雅,但可以在 Windows 上使用任何编程语言而无需额外依赖(在我的例子中是 C++/Qt)。
【讨论】:
“当前内存使用情况”一词的定义有点松散。你是说工作集吗?无论是什么意思,您都可以使用流程类中的不同属性(例如VirtualMemorySize、WorkingSet、PrivateMemorySize 等)来检索它。
long workingSet = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64;
【讨论】:
有很多这类东西的性能计数器,如果你不能使用 Perfmon,你可以通过诊断 API 访问计数器。
【讨论】: