目前,我必須修復現有的泄漏大量內存的Silverlight應用程序。使用Redgate's ANT profiler我設法檢測到可能的問題。其中之一是一個靜態類,它封裝了一個Web服務,它包含兩個事件處理程序來支持異步計算。
你已經猜到了......很多對象都給這個處理程序分配了一個事件,但是大多數對象不會再次釋放它。因此,這些對象鏈接到這些靜態事件,因此幾乎從未發佈...由於事件處理程序而導致內存泄漏
我需要一個簡單的修復程序來解決此問題。那麼,我有什麼可能的選擇來解決這個內存泄漏問題,而這些更改沒有太大的影響?
使得事件處理非靜態將導致巨大的變化,因此不希望的動作......
你可以嘗試取消分配事件處理程序,當你不再需要它們? – tomasmcguinness 2012-04-24 08:47:28
@tomasmcguinness:我想這是提供庫的典型場景,但是您無法控制調用者的編碼質量。但是你是對的,這實際上是最好的解決方案......做一個乾淨的通話與訂閱和取消訂閱事件。 – 2012-04-24 08:54:49
取消分配是一個選項,但這個項目是一個大混亂...我沒有創造它,但他們期望我執行奇蹟。 :-)最大的挑戰是找到我可以取消分配的正確位置。用100.000行代碼,不包括XAML ... Blimey! – 2012-04-24 09:00:26