作者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/cn.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