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

Posted

技术标签:

【中文标题】有没有办法检索 C# 应用程序的当前内存使用情况?【英文标题】:Is there a way to retrieve a C# app's current memory usage? 【发布时间】:2010-10-02 10:43:37 【问题描述】:

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

【问题讨论】:

【参考方案1】:

一旦我不得不在遗留代码中发现内存泄漏,我就遇到了这个解决方案: 以适当的参数启动“tasklist”作为进程,并从流或文件中读取输出。

例如

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

输出是:

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

不是那么优雅,但可以在 Windows 上使用任何编程语言而无需额外依赖(在我的例子中是 C++/Qt)。

【讨论】:

【参考方案2】:

“当前内存使用情况”一词的定义有点松散。你是说工作集吗?无论是什么意思,您都可以使用流程类中的不同属性(例如VirtualMemorySizeWorkingSetPrivateMemorySize 等)来检索它。

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

【讨论】:

【参考方案3】:

有很多这类东西的性能计数器,如果你不能使用 Perfmon,你可以通过诊断 API 访问计数器。

【讨论】:

以上是关于有没有办法检索 C# 应用程序的当前内存使用情况?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 C# 中从我的 YouTube 数据 API v3 检索当前配额使用情况?

有没有办法在我的 C# 应用程序中复制无法读取内存的错误消息?

在 Mac OS X 上检索系统信息 [关闭]

有没有办法增加c#中的堆栈大小?

如何使用 C# 在 MYSQL 中插入和检索图像

使用 C# 从 MS Access DB 中检索表关系