2010-02-09 81 views
0

我在下面的泄漏情況中的一個VB.NET(.NET2)應用程序:一個表格 - DetailTache(TaskDetails) - 在我的MDI應用程序中沒有垃圾收集不收集的是打開/關。幫助找到一個內存泄漏原因

我做了如下分析根:

alt text http://lh6.ggpht.com/_1TPOP7DzY1E/S3Fg3ifizgI/AAAAAAAADC0/flRMOatEljs/s800/Capture2.png

任何想法此泄漏怎麼可能能解決嗎?謝謝。

編輯:從

結果搜索WinComboRowSelected事件。有這個詞的用法3中的應用:

  1. 宣言類WinCombo:Event WinComboRowSelected(ByVal sender...(只有一個)
  2. 籌措:RaiseEvent WinComboRowSelected(sender,(3籌集)
  3. 用法:...e As Keolis.ctlWinCombo.WinCombo.WinComboRowSelectedEventArgs) Handles cmbProduit1.WinComboRowSelected(多個句柄)。

這個事件沒有其他用法。

如果需要其他代碼的詳細信息,請詢問我將它發佈。

+2

我們可以看到一些代碼嗎? – dada686 2010-02-09 13:33:35

+0

@ dada686:好的,告訴我你想看什麼? – serhio 2010-02-09 14:37:13

回答

5

出現在對象樹中的工具提示看起來很重要。它可能連接RowSelected事件的事件處理程序,以便它可以更新提示。顯然你使用的是第三方控件,它聞起來像Infragistics。不是以其產品質量而聞名的公司。我還會猜測,ToolTip是其內部控件,並且您無法訪問它來強制取消訂閱事件處理程序。除了放棄工具提示之外,如果甚至有可能,你也不能做太多事情,但要聯繫供應商尋求支持。或者溝渠控制。

+0

:)像往常一樣,你在正確的中心拍攝(對不起,非英文翻譯)。你有理由,工具提示似乎很重要,因爲我認爲同樣想到其他非Disposed資源通過這個奇怪的工具提示從MDIMainForm傳遞。我們使用一些第三方控件,其中一個是Infragistics。更多的是:'公共類WinCombo繼承Infragistics.Win.UltraWinGrid.UltraCombo' – serhio 2010-02-09 17:54:37

+1

Hmya,我不明白你爲什麼不透露這種基本信息。分散在4個主題,所有關於同一問題,你已經浪費了大約15個貢獻者到這個論壇的時間。在這裏提出問題似乎是某種遊戲給你的。英文中的術語是「代表嫖娼」,我不知道法國的那個術語。 Anyhoo,控制,Infragistics創造垃圾。 – 2010-02-09 18:09:18

+0

@nobugz:首先,謝謝你對這個問題的啓發。現在,你沒有理由批評。我怎麼能知道這**信息是必不可少的?!對我來說,這是一個真正的「發現」,第三控制可能導致這個失敗!其次,我關於內存泄漏的其他線程並未與此問題直接相關。通過例如「如何刪除基本表單上的處理程序」是一個普遍問題,「可以委託原因內存泄漏」是另一個(已解決)問題 - 我有一個未配置的委託,我沒有它了,EventHandler和內存泄漏也是一個一般問題等等 – serhio 2010-02-10 09:15:37

0

沒有你的代碼,很難說如何解決泄漏問題。

記住什麼可以使物品不被垃圾收集。如果它仍然有一個對象的引用。

我會看看你的可能,並確保所有引用設置爲null,當你期望它被收集。如果沒有收集到,這意味着仍然有某種參考。

爲了更好地理解垃圾收集,我會讀這article

+0

EventHandler的引用,正如我們在我的例子中看到的,不太明顯可以檢測到......我在Edit中添加了一些解釋。 – serhio 2010-02-09 13:53:51

0

您的表單是否有任何尚未退訂的事件處理程序?這將是控制不被垃圾收集的首要原因。

確保在處置表單之前,訂閱WinComboRowSelectedEvent的表單也取消訂閱。

+0

在編輯中添加了關於此事件的一些說明 – serhio 2010-02-09 13:48:25

0

VMMap提供了靈活的意見活進程的內存分析:

的VMMap是一個進程的虛擬和物理內存分析工具。它顯示了進程提交的虛擬內存類型以及操作系統爲這些類型分配的物理內存(工作集)的數量。除了內存使用的圖形表示外,VMMap還顯示摘要信息和詳細的進程內存映射。強大的過濾和刷新功能使您可以識別進程內存使用的來源和應用程序功能的內存成本。

+0

這是分析內存使用的工具 - 您有內存泄漏。加入點。 – 2010-02-09 13:59:58

+0

在我的情況下,我用JetBrains dotTrace和.NET內存分析器,VMMap可以告訴我更多,我已經有? – serhio 2010-02-09 14:02:41

+0

對不起,serhio。我只知道你的問題和gimel的答案之間的聯繫。 – 2010-02-09 14:29:39

0

正如nobugs(再次感謝),問題確實存在於所使用的第三方組件 - Infragistics中。

正如我後來發現的,Infragistics團隊決定保留對內存中所有添加控件的靜態引用,以便支持XP主題更改的這種(輔助imho)效果。

真的對問題有幫助的是this article,女巫提供的解決方案使用WeakReferences替換保存在內存中的對象,可以由GC收集。

幸運的是,我們在文章和解決方案中使用了較早版本的Infragistics。然而,可惜的是,Infragistics不打算修復這些錯誤,甚至在幾年前宣佈。