2010-10-27 64 views
2

我有一個WPF應用程序,似乎沒有在x64系統上收集垃圾。我已經在x86機器上進行了仔細的測試,我相信這不是一個編程問題,內存使用量將會增長,然後按照我的預期進行垃圾回收。目標平臺=「任何CPU」.NET垃圾收集器在x86/x64之間的區別。 x64不收集

我發現,我可以通過與目標= 86編譯消除在x64機器這種行爲。 x64或「任何CPU」無法釋放內存。

我在我的調查,創建一個子應用程序域和手動最小化應用程序工作在x86上設置的作品,但在x64系統中被忽略也注意到了。直到我設置目標= x86。

有誰知道爲什麼這種行爲的存在?我們是否需要避免'任何CPU'或x64?

+0

該機器的可用內存量是多少?那裏的內存總量是多少? – zerkms 2010-10-27 01:01:59

+0

至少某些版本的Windows 32位將在您最小化應用程序的工作集時強制最小化。也許這是從64位版本中消除的。 – 2010-10-27 01:37:34

+2

請勿使用Taskmgr.exe來診斷GC問題。 – 2010-10-27 05:29:48

回答

2

垃圾收集器,當它決定它需要運行運行。這通常是內存使用量以及可用內存量的問題。

如果有問題的機器(S)擁有大量的內存,沒有理由對GC執行。在x86機器中,內存壓力通常是一個問題,因爲一個進程的總可用內存要小得多(通常爲2GB),並且整個系統總體(總共約3GB)較低。 64位系統沒有這些限制,所以GC可能運行的頻率較低。

但請記住,這不是壞事 - 使用內存是,只要你沒有用完。更多的GC收集只會降低您的整體性能,只有在可用內存不足的情況下才是好事。否則,你可能會使用可用的內存。