[問題] WPF 自動生成control時造成memory leak

作者: z79263578 (Reinace)   2022-04-02 11:26:06
透過contentcontrol 的datatemplate datatype 綁定自動生成control時,因為會平凡切換
control
但每次切換control都會使用大量記憶體,發現切換control的時候記憶體不會自動被GC回收
,因為control內部訂閱著外部事件,所以一定要control內部呼叫類似dispose的函式才會解
除訂閱
但是我是透過datatemplate datatype綁定自動生成該control的,在viemodel並沒有該cont
rol的實例,而且MVVM應該也不太準許在vm出現view的實例,這時候我要怎麼在切換的時候去
呼叫該control的dispose函式呢?
不然每次切換都是自動生成一個新的control並佔用大量記憶體,只要多切換幾次記憶體就爆
作者: testPtt (測試)   2022-04-02 12:29:00
訂閱要有地方解除 通常leak都是訂閱造成你可以在不用的時候set一個屬性通知解除訂閱
作者: z79263578 (Reinace)   2022-04-03 16:12:00
我自己想到的方法也是用一個附加屬性去通知解除訂閱可是想知道像這種使用綁定去自動生成的例子有沒有其他事件或方法去處理?因為是由wpf幫我們生成的control
作者: testPtt (測試)   2022-04-04 08:31:00
如果你是不用就丟的東西可以用WeakReference

Links booklink

Contact Us: admin [ a t ] ucptt.com