2011-05-17 44 views
2

由於命令的約束,我的控件將保持活動狀態。我怎樣才能打破這個參考?這在我的應用程序中導致大量內存泄漏。該控件位於DataTemplate內部,因此我無法直接訪問它。Silverlight控件不會因爲命令而被垃圾收集

這裏是我的螞蟻內存配置文件:

ANTS memory profile

如何在地球上我打破這種聯繫?

+0

看看這個鏈接:http://forums.silverlight.net/forums/p/177550/418045.aspx – dlev 2011-05-17 14:10:52

+0

好,但是'WeakEventListenerBase'是什麼。它沒有在任何地方實施或記錄。 http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=WeakEventListenerBase – Jordan 2011-05-17 14:44:11

+0

如果您按照其中一篇文章中的鏈接進行操作,則可以在此處訪問:http://blog.thekieners.com/2010/ 02/17/weakeventsource-implementation-2/ – dlev 2011-05-17 14:49:03

回答

2

儘管我併入了WeakEventListener,但我發現我的問題是用我用來包裝圖像的控制。我把它掛在了DownloadProgress,ImageOpenedImageFailed事件上,並且從未將它們解開。我的想法是,我的代碼中沒有任何東西觸及對象,因此它們會被控件垃圾回收。這看起來並非如此。 BitmapImage對象由Microsoft代碼中名爲「ManagedPeerTable.PeggedManagedPeersWithRefs」的靜態成員(因此爲GC根)引用。谷歌搜索的深度非常深,僅爲它返回了五個結果。現在我想會有六個。