我在C#中編寫了一個hello world程序(沒有任何UI的windows應用程序)。 release-build excutable除了Thread.Sleep(50000)// 50秒之外什麼都不做。 我打開sysinternals(類似任務管理器的分析器)。這個可改變的7MB內存(專用字節)! 任何人都可以解釋發生了什麼以及如何使內存使用更小。 P.S.我也嘗試使用NGEN預編譯.exe,但仍獲得相同的內存使用量。如何最大限度地減少Windows中的內存使用情況
非常感謝
我在C#中編寫了一個hello world程序(沒有任何UI的windows應用程序)。 release-build excutable除了Thread.Sleep(50000)// 50秒之外什麼都不做。 我打開sysinternals(類似任務管理器的分析器)。這個可改變的7MB內存(專用字節)! 任何人都可以解釋發生了什麼以及如何使內存使用更小。 P.S.我也嘗試使用NGEN預編譯.exe,但仍獲得相同的內存使用量。如何最大限度地減少Windows中的內存使用情況
非常感謝
C#(和其他JIT編譯/解釋語言)通常最終會自動在後臺做了很多的東西給你。儘管你所寫的內容很簡單,但後臺還有很多內容支持應用程序的JIT特性。
現在7MB的內存相對較小,因爲現在2GB的內存相當普遍。除非你做了一些不尋常的事情或者分配大量的數組和數據結構,否則它可能不會更多。
如果它是基於C#WindowsApplication項目類型的Hello World,並且Program.cs中有一個int main在Windows窗體上執行application.run,那麼不僅有很多JIT開銷,而且還有一個很多Windows Forms的開銷也是如此。
一天結束,我確定一切都很花哨。
感謝您的回答。 那麼我的計算機上運行的其他一些進程如SynTPEnh.exe(Synaptics TouchPad程序)如何呢?它只使用1.5MB。這是否意味着它們不是用.Net編寫的?如果我想要一些內存小的東西,我應該放棄.net並使用C++嗎?或者這是其他一些方法?再次感謝。順便說一下,我上面寫的測試項目是一個沒有任何UI的Windows應用程序。 – Frank 2011-03-07 19:35:17
我相信你問的是錯誤的問題 - 如果你真的需要一個內存使用率較低的程序,你應該放棄.NET並使用C++。但你確定這是值得的麻煩? – 2011-03-07 19:53:41
@user你會放棄很多從.NET到C++的轉變。這會傷害你。看起來你很難發現.NET的資源使用麻煩。 – 2011-03-07 21:31:27
.Net應用程序有很多基本的開銷,但在此之後你的記憶力增加應該相對較小。
例子。我的一個應用程序在加載時消耗10MB內存,但從數據庫加載60k行後,它只消耗40MB內存,每行包含多個字符串和許多值。
在現代計算機上,一個小的固定預付值並不壞。可伸縮性是現在一天的首要問題。 .Net可以很好地管理。
您選擇使用.net,然後抱怨它會消耗大量資源!如果你想輕量級,那麼你總是可以嘗試像這些[產品](http://stackoverflow.com/questions/284797/)。 – 2011-03-07 19:19:55
@大衛,我不會說OP已經「抱怨」,而是他們問了一個怎麼理解的問題。不是每個人都知道的一切,這是一個問答網站畢竟=) – Rob 2011-03-07 19:22:48
@大衛:7MB是不是一個工作集了大量的了。 ;> – dthorpe 2011-03-07 19:24:30