作者z79263578 (水餃)
看板C_Sharp
標題[問題] WPF 自動生成control時造成memory leak
時間Sat Apr 2 11:26:06 2022
透過contentcontrol 的datatemplate datatype 綁定自動生成control時,因為會平凡切換
control
但每次切換control都會使用大量記憶體,發現切換control的時候記憶體不會自動被GC回收
,因為control內部訂閱著外部事件,所以一定要control內部呼叫類似dispose的函式才會解
除訂閱
但是我是透過datatemplate datatype綁定自動生成該control的,在viemodel並沒有該cont
rol的實例,而且MVVM應該也不太準許在vm出現view的實例,這時候我要怎麼在切換的時候去
呼叫該control的dispose函式呢?
不然每次切換都是自動生成一個新的control並佔用大量記憶體,只要多切換幾次記憶體就爆
了
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.52.39.156 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_Sharp/M.1648869968.A.841.html
1F:→ testPtt: 訂閱要有地方解除 通常leak都是訂閱造成 04/02 12:29
2F:→ testPtt: 你可以在不用的時候set一個屬性通知解除訂閱 04/02 12:35
3F:→ z79263578: 我自己想到的方法也是用一個附加屬性去通知解除訂閱 04/03 16:12
4F:→ z79263578: 可是想知道像這種使用綁定去自動生成的例子有沒有其他 04/03 16:14
5F:→ z79263578: 事件或方法去處理? 04/03 16:14
6F:→ z79263578: 因為是由wpf幫我們生成的control 04/03 16:14
7F:→ testPtt: 如果你是不用就丟的東西可以用WeakReference 04/04 08:31