如果以相同的方式执行进程总是消耗相同数量的内存吗?

时间:2011-01-21 09:49:39

标签: memory process memory-management byte

嗨大家好,感谢您提前的时间。

我目前正在扩展我们的C#测试框架,以监控应用程序消耗的内存。目的是如果内存消耗显着跳跃到新构建上,因为资源总是很紧张,可能会引发错误。

我正在使用System.Diagnostics.Process.GetProcessByName,然后检查PrivateMemorySize64值。

在开发新测试期间,当使用相同版本的应用程序来保持一致性时,我已经看到它消耗了不同的内存量,尽管假设执行完全相同的代码。

所以我的问题是,如果一个应用程序一旦启动,完全加载并且在这种情况下处于空闲状态,因此在运行之间处于相同的状态,我可以期望从运行到运行所消耗的专用字节是相同的?

我需要澄清一点,我可以预期内存使用是一致的,因为任何程度的变化都会降低测试的有效性,因为需要引入一定程度的容差,这是我想要避免的。

因此...

1)假设应用程序行为一致,内存使用是否应该100%一致?这是我的期望。

2)在应用程序请求时,Windows或其分配的内存中返回的私有字节使用是否存在任何程度的差异?

目前,如果答案是消耗的内存应该与我预期的一致,那么问题在于我们的应用实际上要求不同的内存量。

非常感谢

ħ

2 个答案:

答案 0 :(得分:0)

.NET中的几乎所有东西都使用运行时的垃圾收集器,当它运行时和它释放多少内存取决于许多因素,其中许多因素都不在你手中。例如,当另一个程序需要大量内存,并且你手头有很多可收集的内存时,GC可能决定现在释放它,而当你的程序是唯一运行的程序时,GC启发式可能会认为它更高效让可收集的内存累积更长一点。所以,简短回答:不,内存使用率不会100%一致。

OTOH,如果你的运行之间存在很大差异(例如,一次运行几兆字节而另一运行只有几千兆字节),你应该怀疑。

答案 1 :(得分:0)

如果程序是确定性的(就像所有嵌入式程序一样),那么是。在OS环境中,由于内存碎片和许多其他因素,您不太可能获得相同的数字。

<强>更新

刚刚注意到这是一个C#app,所以没有,但数字应该相对接近(+/- 10%或更少)。