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

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

【问题讨论】:

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


    【解决方案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 访问计数器。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-08-13
          • 2021-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-21
          • 2011-09-26
          • 2013-05-11
          相关资源
          最近更新 更多