2011-06-27 54 views
0

我們有一個.net c#服務,當它在咀嚼越來越多的內存時。它有一個'Service'派生類,它基本上創建了其他對象,這些對象封裝了服務旨在支持的各個功能。我在想,也許我正在創建一個對象,並且由於編程錯誤而沒有收集垃圾。如何解決爲什麼我的.net服務咀嚼內存?

任何人都知道最好的方式來找出發生了什麼事情,而不設置斷點?

+0

你確定*(如在*真的確定*)該服務正在進食內存? [解剖一個「內存泄漏」](http://stackoverflow.com/questions/104/anatomy-of-a-memory-leak)是調查原因的一個很好的起點。 –

+0

在任務管理器中,內存正在增加。當它在3天后17K打開時,它的容量爲5GB。我能更確定嗎? – Exitos

回答

0

最好的方法是運行Visual Studio中的Performance Profiler。它允許你看到你的對象的生命週期。

This link might be helpful

0

您必須使用需要進行配置的對象。
一些很好的例子是流和網絡客戶端。

+0

是的我認爲你的權利我創建的對象,但我需要確定哪些對象。 – Exitos

+0

好吧,沒有人比人類更能識別一次性物體。看看你使用的可疑類,看看他們是否有'Dispose'方法。也許確定它的第一步是告訴我們該服務做了什麼。如果它是一個Web服務,你可能會有'WebClient'未定義,或者來自Web響應的'NetworkStream'... – Vercas

0

創建文本日誌並記錄發生的所有事情並從那裏開始工作。特別是對於服務來說,這是找出可能出錯的最簡單方法。只需打印出事件,對象及其屬性的狀態。

也許你可以找到某種方式。

祝你好運

0

打開任務管理器,看內存

包裹在一個類中的每個主要部分的執行(這裏我用一個BLL)

然後從BLL

調用

然後嘗試包裹每個頂層片中using語句一次一個

using (TheBll bll = new TheBll) 
      { 
       bll.ProcessStuff(); 
      } 

這使得代碼完成後最everythign解除分配,使得更容易內存清理。

然後重新運行,如果內存停止上升或減慢,您已經找到cuplrit,進入更深層次。

如果您在使用語句包裝完所有頂級調用之後對結果感到滿意,那麼可以在深入挖掘之前完成。(雖然你應該挖掘,只是爲了瞭解什麼是真的錯誤,當你不急時)

相關問題