我想在我的应用程序的状态栏中可视化我的应用程序使用的内存。我正在寻找记忆漏洞 - 但我不知道在哪里。现在,我的想法是在状态栏中可视化使用的内存,以便在我使用应用程序时找到它,找到问题发生的部分然后我可以对其进行分析。
有人可以给我一些帮助,我怎样才能获得用过的记忆。
答案 0 :(得分:34)
您可以使用以下函数(true参数告诉GC首先执行集合):
long memory = GC.GetTotalMemory(true);
答案 1 :(得分:11)
您可以尝试GC.GetTotalMemory
:
它检索当前认为要分配的字节数。参数表示该方法是否可以等待短的间隔>在返回之前,允许系统收集垃圾并最终确定>对象。
或
using System.Diagnostics;
Process currentProc = Process.GetCurrentProcess();
一旦引用了当前进程,就可以通过读取PrivateMemorySize64属性来确定其内存使用情况。
long memoryUsed = currentProc.PrivateMemorySize64;
答案 2 :(得分:4)
如果要监视应用程序使用的内存,则无需为此编写代码。只需使用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
答案 3 :(得分:-1)
为什么不直接使用TaskManager或Sysinternals中的更高级工具来监控内存使用情况,并且只有在确定哪个工作流异常提高内存使用率后,才能使用CLR Profiler或其他人分析应用程序。