簡體   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