【问题标题】:How to get the amount of memory used by an application [duplicate]如何获取应用程序使用的内存量[重复]
【发布时间】:2012-12-11 12:50:34
【问题描述】:

可能重复:
How to get memory available or used in C#

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

谁能给我一些帮助,我怎样才能得到使用的内存。

【问题讨论】:

    标签: c# memory-management memory-leaks


    【解决方案1】:

    可以使用如下函数(true参数告诉GC先进行一次回收):

    long memory = GC.GetTotalMemory(true);
    

    【讨论】:

    【解决方案2】:

    你可以试试GC.GetTotalMemory:

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


    using System.Diagnostics;
    
    Process currentProc = Process.GetCurrentProcess();
    

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

    long memoryUsed = currentProc.PrivateMemorySize64;
    

    【讨论】:

    • 它们是一样的吗?
    【解决方案3】:

    如果您想监控应用程序使用的内存,则无需为此编写代码。只需使用 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-Process-Id

    【讨论】:

    • Geekpedia 链接不再可用
    • 我更改了示例,@MichaelFreidgeim,谢谢
    • 为此,我需要访问我不需要的客户计算机。我需要一种方法来收集这些数据并以log.txt 形式发送回服务器
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2016-02-04
      • 2013-11-07
      • 2013-04-19
      • 2013-07-18
      相关资源
      最近更新 更多