如何在dot net下获得可靠/一致的最大内存使用率结果

时间:2013-03-19 13:53:34

标签: c# .net memory performance-testing

我们有各种测试来监视我们的应用程序(或子组件)在各种情况下的内存使用情况,以检查回归。问题是我们的测量(使用Process.Refresh(); Process.PrivateMemorySize64)在不同的运行中波动很大。

我们目前正在做的是每隔X毫秒通过后台线程进行轮询。我们将达到的最大值与基准进行比较,并相应地通过/失败。

有趣的是,减少轮询之间的时间会显着降低记录的最大内存值。在一个示例中,每100ms读取存储器最多为360MB,每10ms提供147MB,每1ms提供35ms。 据推测,观察数量的增加会使GC行为更加激进。

我认为主要的问题是我们试图测量的“最大内存使用量”并没有特别明确。 如果有足够的可用内存,GC可能无法启动,因此内存使用率会更高。

是否有一种标准的方法来测量点网下的内存使用情况以防止性能下降?

2 个答案:

答案 0 :(得分:1)

  

我认为主要的问题是我们试图测量的“最大内存使用量”并没有特别明确。如果有足够的可用内存,GC可能无法启动,因此内存使用率会更高。

这是你的问题。垃圾收集的运行时在可用时会占用更多内存并不是随意的。当这些算法具有更大的存储空间来“玩耍”时,它们可以更好地执行 。对于客观分析,您必须使用工具仅分析可访问的集合,该集合不受垃圾收集行为的影响。

答案 1 :(得分:0)

您可以使用PerformanceCounter class来衡量内存使用情况链接:http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx

手动,您可以使用Memory Profiler tool来检查您的记忆

link:http://memprofiler.com/