关于c#:在Windows中长时间跟踪进程内存使用情况的最佳工具是什么?

关于c#:在Windows中长时间跟踪进程内存使用情况的最佳工具是什么?

What's the best tool to track a process's memory usage over a long period of time in Windows?

什么是最好的工具来监视我的C#/ .Net Windows服务在很长一段时间内的内存使用情况。 据我所知,像perfmon这样的工具可以在很短的时间内监控内存使用情况,但不会在很长一段时间内以图形方式监控。 我需要几天而不是几秒钟的趋势数据。

为了清楚起见,我希望在很长一段时间内以精细的细节级别监视内存使用情况,并让图表显示整个时间范围和详细程度。 我需要一个小的采样间隔和一个大图。


在我看来,Perfmon是执行此操作的最佳工具之一,但请确保根据您希望监控的时间正确配置采样间隔。

例如,如果要监视进程:

  • 1小时:我会使用1秒间隔(这将生成60 * 60个样本)
  • 1天:我将使用30秒间隔(这将生成2 * 60 * 24个样本)
  • 为期1周:我将使用1分钟间隔(这将生成60 * 24 * 7个样本)

使用这些采样间隔,Perfmon应该可以生成计数器的漂亮图形输出。


好吧,我使用了perfmon,将结果导出到csv,然后使用excel进行统计。上次我需要监控一个过程时,这非常有效


与监视内存本身一样好,您可能正在考虑使用内存分析来识别泄漏或过时的对象 - http://memprofiler.com/在这里是一个不错的选择,但还有很多其他的。

如果你想做一些非常具体的事情,不要害怕在计时器上编写你自己的基于WMI的记录器 - 你可以通过电子邮件向你发送流程统计信息,当它增长太快或太高时发出警告,发送它作为用于图表的XML等


玩弄计算机管理(假设你在这里运行Windows),看起来你可以让它随着时间的推移监控一个过程。转到计算机管理 - >性能日志和警报,然后查看计数器/跟踪日志。右键单击计数器日志并添加新日志。现在单击添加对象并选择内存。现在单击添加计数器并将"性能对象"更改为"处理",然后选择您的流程。


我建议使用软件验证中的.Net Memory Validator工具。
这个工具帮助我解决了我必须使用的.Net应用程序中与内存管理相关的许多不同问题。

我更频繁地使用C ++版本,但它们非常相似,而且您可以实时看到所分配对象的类型这一事实对您来说非常宝贵。


如果您熟悉Python,那么为此编写脚本非常容易。

Activestate Python(免费)通过win32process模块??公开Win32 API的相关部分。

您还可以查看所有与win32相关的模块,或使用gotAPI浏览Python标准库。


如果你需要比perfmon更强大的功能,我已经使用过ProcessMonitor。


推荐阅读