2011-03-07 61 views
2

我在C#中編寫了一個hello world程序(沒有任何UI的windows應用程序)。 release-build excutable除了Thread.Sleep(50000)// 50秒之外什麼都不做。 我打開sysinternals(類似任務管理器的分析器)。這個可改變的7MB內存(專用字節)! 任何人都可以解釋發生了什麼以及如何使內存使用更小。 P.S.我也嘗試使用NGEN預編譯.exe,但仍獲得相同的內存使用量。如何最大限度地減少Windows中的內存使用情況

非常感謝

+1

您選擇使用.net,然後抱怨它會消耗大量資源!如果你想輕量級,那麼你總是可以嘗試像這些[產品](http://stackoverflow.com/questions/284797/)。 – 2011-03-07 19:19:55

+4

@大衛,我不會說OP已經「抱怨」,而是他們問了一個怎麼理解的問題。不是每個人都知道的一切,這是一個問答網站畢竟=) – Rob 2011-03-07 19:22:48

+0

@大衛:7MB是不是一個工作集了大量的了。 ;> – dthorpe 2011-03-07 19:24:30

回答

5

C#(和其他JIT編譯/解釋語言)通常最終會自動在後臺做了很多的東西給你。儘管你所寫的內容很簡單,但後臺還有很多內容支持應用程序的JIT特性。

現在7MB的內存相對較小,因爲現在2GB的內存相當普遍。除非你做了一些不尋常的事情或者分配大量的數組和數據結構,否則它可能不會更多。

如果它是基於C#WindowsApplication項目類型的Hello World,並且Program.cs中有一個int main在Windows窗體上執行application.run,那麼不僅有很多JIT開銷,而且還有一個很多Windows Forms的開銷也是如此。

一天結束,我確定一切都很花哨。

+0

感謝您的回答。 那麼我的計算機上運行的其他一些進程如SynTPEnh.exe(Synaptics TouchPad程序)如何呢?它只使用1.5MB。這是否意味着它們不是用.Net編寫的?如果我想要一些內存小的東西,我應該放棄.net並使用C++嗎?或者這是其他一些方法?再次感謝。順便說一下,我上面寫的測試項目是一個沒有任何UI的Windows應用程序。 – Frank 2011-03-07 19:35:17

+0

我相信你問的是錯誤的問題 - 如果你真的需要一個內存使用率較低的程序,你應該放棄.NET並使用C++。但你確定這是值得的麻煩? – 2011-03-07 19:53:41

+0

@user你會放棄很多從.NET到C++的轉變。這會傷害你。看起來你很難發現.NET的資源使用麻煩。 – 2011-03-07 21:31:27

2

.Net應用程序有很多基本的開銷,但在此之後你的記憶力增加應該相對較小。

例子。我的一個應用程序在加載時消耗10MB內存,但從數據庫加載60k行後,它只消耗40MB內存,每行包含多個字符串和許多值。

在現代計算機上,一個小的固定預付值並不壞。可伸縮性是現在一天的首要問題。 .Net可以很好地管理。

相關問題