[问题] 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