2011-08-24 66 views
0

我們有一個c#.NET應用程序,佔地約300 MB。300MB內存佔用不好?

我的問題:

  1. 你監視你的應用程序的內存佔用?
  2. 這是300MB的足跡不好嗎?
  3. 那裏有指導嗎?
+3

這只是「壞」,如果它不符合你對應用程序的期望。你有什麼理由期待300MB的佔用空間過大? – razlebe

+0

沒有理由,只是想知道是不是有一個過度的內存足跡... – bstack

+1

好的,謝謝。我的觀點是,「過度」與預期有關。如果您的程序在299MB文件中打開並閱讀,則300MB的佔用空間不會過大。如果你的程序是「Hello World」,那很可能是。如果沒有更多的信息,就不可能告知它是否過分。最好的建議是,下面已經提供了,這只是一個問題,如果(a)你不能騰出300MB的內存,或(b)佔用空間不斷增加,表明存在內存泄漏。 – razlebe

回答

2

簡短的回答:

我們只監測一次WPF應用程序的內存使用情況,其中又以對我們的第三方控件之一,成爲相當嚴重的造成的錯誤。

由於.NET提供了一個託管框架,唯一的指導原則可能是不擔心內存,只要它不成爲問題。 GC可以很好地處理自己,只要他們的內存仍然可用,爲什麼不使用它?

那麼它何時成爲一個問題?當你需要開始擔心時,解決內存異常可能是你的觀點。我個人從來沒有見過這種情況發生。

1

最重要的是它不會隨着時間的推移而增長。爲了正確地評估這種情況,最好在預計內存使用率很低的時候進行一些偶爾的強制垃圾回收可能會很有用。

在我們的GUI應用程序中,我們在會話關閉時這樣做,每隔10分鐘左右。如果人們反對在發佈應用程序中強制使用GC,則可以將其作爲僅調試構建功能。

+0

我們沒有增加內存佔用的問題,因此我們不需要強制垃圾收集。我只是擔心300MB的momory足跡可能太大? – bstack

+0

@bstack:對於只有256MB內存的機器而言,它太大了。我們的應用程序,包含20個小時的dll,啓動後需要250MB。這從來不擔心我。這大部分是可執行的和CLR開銷。託管堆幾乎是空的。您可以使用「.NET Clr內存」類別中的計數器通過perfmon進行檢查。 – 2011-08-24 13:35:01

1

如果內存增長在一段時間內我只會擔心 - 你可能需要使用自動化測試,以便一遍又一遍地重複操作,揭露內存泄漏(見How to test a WPF user interface?

如果你是真的很擔心我會考慮使用內存分析器,如Redgate ANTS Profiler或者如果你想免費試用CLRProfiler4;後者是很難使用的,但它仍然會耐心地發現內存泄漏。

+0

我們沒有內存泄漏,只是擔心300MB的momory足跡太大! – bstack

+0

您也可以使用內存分析器來查看分配內存的位置。 –

2

作爲一項規則,靜態內存佔用不是一個問題,儘管它很大,除非它在目標計算機上導致問題。內存真正的問題是當你有內存泄漏時,內存在增加。

我從來不打擾的原因是,我不知道特定應用程序的內存佔用是好還是差。我認爲有更好的途徑來識別代碼中的問題,而不是集中在內存上。簡而言之,如果你的代碼編寫得很好,並且你已經刪除了不需要的引用,那麼你的內存佔用將是正確的。

+0

我們沒有內存泄漏,只是擔心300MB的momory足跡太大! – bstack

+0

這是,如果你只有200MB可用。另一方面,如果您有2GB可用,則不是。 – UrbanEsc