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

看板C_Sharp (C#)作者 (水餃)時間2年前 (2022/04/02 11:26), 編輯推噓0(007)
留言7則, 2人參與, 2年前最新討論串1/1
透過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://www.ptt.cc/bbs/C_Sharp/M.1648869968.A.841.html

04/02 12:29, 2年前 , 1F
訂閱要有地方解除 通常leak都是訂閱造成
04/02 12:29, 1F

04/02 12:35, 2年前 , 2F
你可以在不用的時候set一個屬性通知解除訂閱
04/02 12:35, 2F

04/03 16:12, 2年前 , 3F
我自己想到的方法也是用一個附加屬性去通知解除訂閱
04/03 16:12, 3F

04/03 16:14, 2年前 , 4F
可是想知道像這種使用綁定去自動生成的例子有沒有其他
04/03 16:14, 4F

04/03 16:14, 2年前 , 5F
事件或方法去處理?
04/03 16:14, 5F

04/03 16:14, 2年前 , 6F
因為是由wpf幫我們生成的control
04/03 16:14, 6F

04/04 08:31, 2年前 , 7F
如果你是不用就丟的東西可以用WeakReference
04/04 08:31, 7F
文章代碼(AID): #1YHy9GX1 (C_Sharp)
文章代碼(AID): #1YHy9GX1 (C_Sharp)