繁体   English   中英

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

[英]Should a process always consume the same amount of memory if executed in the same way?

大家好,谢谢您的宝贵时间。

我目前正在扩展C#测试框架,以监视应用程序消耗的内存。 目的是如果由于资源总是紧张而在新的版本上内存消耗大大增加时,可能会引发错误。

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

在开发新测试的过程中,当使用相同版本的应用程序以保持一致性时,尽管执行了完全相同的代码,但我看到它消耗了不同数量的内存。

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

我需要澄清的是,我可以期望内存使用情况保持一致,因为任何程度的差异都会开始降低测试的有效性,因为需要引入一定程度的容忍度,我想避免这种情况。

所以...

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

要么

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

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

非常感谢

H

.NET中的几乎所有内容都使用运行时的垃圾收集器,确切的运行时间以及释放的内存量取决于许多因素,其中许多是您无法控制的。 例如,当另一个程序需要大量内存,而您手头有很多可收集的内存时,GC可能会决定立即释放它,而当您的程序是唯一正在运行的程序时,GC启发式方法可能会决定它的效率更高让可收集的内存积累更长的时间。 因此,简短的回答:不,内存使用率不会保持100%一致。

OTOH,如果两次运行之间确实存在很大差异(例如,一次运行有几兆字节,而另一次运行有几兆字节),则应该变得可疑。

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

更新:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM