2011-01-21 69 views
0

嗨,夥計們,並提前感謝您的時間。如果以相同的方式執行進程,進程總是會消耗相同數量的內存嗎?

我目前正在擴展我們的C#測試框架來監視我們的應用程序所消耗的內存。意圖是如果內存消耗在新版本上顯着跳躍,則可能會因爲資源總是緊張而導致錯誤發生。

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

在開發新的測試過程中,當使用相同版本的應用程序進行一致性測試時,我發現儘管假設執行完全相同的代碼,但它消耗了不同的內存量。所以我的問題是,如果一旦一個應用程序啓動,完全加載,在這種情況下,它處於空閒狀態,因此處於從運行到運行的完全相同的狀態,我可以期望消耗的專用字節從運行到完全相同跑?

我需要澄清的是,我可以預料的內存使用情況是一致的varience的任何程度開始降低測試的寬容度的有效性將需要引進,這是我想避免的。

所以......

1)如果內存使用率是100%一致的假設應用程序consistenly行爲?這是我的期望。

2)是否存在通過窗口或當一個應用程序要求它分配內存返回的專用字節使用率變化的任何程度?

目前,如果答案是內存消耗應該是一致的,因爲我的預期,問題在於我們的應用程序實際上要求不同數量的內存。

非常感謝

^h

回答

0

幾乎一切都在.NET使用運行時的垃圾回收器,和什麼時候運行和多少內存釋放取決於很多因素,其中有許多是出於你的雙手。例如,當另一個程序需要大量內存,並且手頭上有很多可收集的內存時,GC可能會決定現在釋放它,而當您的程序是唯一正在運行的程序時,GC啓發式可能會決定它更有效讓可收集內存累積更長時間。所以,簡短的回答:不,內存使用率不會100%一致。如果你在運行之間有很大差異(比如說一次運行幾兆字節而另一半運行一半字節),你應該會感到懷疑。

+0

感謝您對自己和Leppie的快速反饋:) – Horatio 2011-01-21 10:41:21

0

如果程序是確定性的(就像所有的嵌入式程序一樣),那麼是的。在OS環境中,由於內存碎片和其他許多因素,您不太可能獲得相同的數字。

更新:

就在注意到C#應用程序,所以沒有,但數字應該是比較接近(+/- 10%或更少)。

相關問題