2011-11-11 50 views
-2

我已經使用Visual Studio .NET構建了一個應用程序,它工作正常。應用程序使用超過2-3小時後,它開始變慢,我不知道爲什麼。我用GC.Collect();來解決內存泄漏問題,但現在我有了新的問題。 有誰知道解決方案?從應用程序中獲得緩慢

+0

沒有更多的細節和/或代碼您的問題可能太寬泛無法回答。有太多未知因素;有可能不會有一個簡單而通用的解決方案。 –

回答

1

如果你真的有內存泄漏,只是打電話GC.Collect()對你沒好處。 GarbageCollector只能收集那些不再被別人引用的對象。

如果你沒有正確地清理你的對象,GC將不會收集任何東西。

當內存消耗處理,你應該認真考慮以下模式:

  1. 弱活動(MSDN Documentation here) 如果你從事件沒有退訂,訂閱對象將永遠不會被釋放到垃圾收集。 GC.Collect()不是刪除這些對象,他們會混亂你的記憶。

  2. 落實IDisposable接口(MSDN documentation here) (我強烈建議閱讀本ducumentation因爲我已經見過很多錯誤的實現。) 你應該用你總是免費資源。請致電Dispose()每個對象提供吧!

  3. 這同樣適用於流。每個對象總是致電Close()提供此。

  4. 要使點2和3更容易,您可以使用using塊。 (MSDN documentation here) 只要這些代碼塊超出範圍,它們就會自動在給定對象上調用適當的Dispose()Close()方法。這是相同的,但更方便,因爲使用了try... finally組合。

+0

與調試和發佈有什麼高的區別,因爲我在調試中進行了部署?當我在釋放模式下建立我的設置時速度更快嗎? –

+0

一般來說,RELEASE模式下的應用程序比DEBUG模式稍快,因爲在DEBUG模式下,有很多花樣的東西在幕後進行,在部署爲RELEASE時不會運行。但是關於GarbageCollector,這不會有太大的影響。我認爲這會走向錯誤的方向。 –