WPF 内存泄漏方法定位
总结来说:
1、事件未注销
解决方法:注意注销和清理这种事件。 A.Event-=处理函数
2、数据绑定,由于绑定的属性不是DependencyProperty并且不是继承自INotifyPropertyChanged。
经实验证明这种属性是不会自动更新的。
解决方法:a、在绑定的时候注意标明BindingMode.OneTime
b、BindingOperations.ClearBinding(DependObject, DependObject Property)
Binding myDataBinding = new Binding("Children.Count");
myDataBinding.Source = myGrid;
myDataBinding.Mode = BindingMode.OneWay;
MyTextBlock.SetBinding(TextBlock.TextProperty, myDataBinding);
3、Command绑定,这种泄漏方式和1极其类似
解决方法: Window1.w1.CommandBindings.Remove(myCmdBinding);
RoutedCommand command = new RoutedCommand("ClearBox", this.GetType());
command.InputGestures.Add(new KeyGesture(Key.F5));
myCmdBinding = new CommandBinding(command, F5CommandExecute);
Window1.w1.CommandBindings.Add(myCmdBinding); //add binding to Window 1
4、静态事件
5、其他的据说在目前的(.Net 3.5 SP1后期版本会修复),内存泄漏定位方法请阅读原文。就是图片的BitmapImage注意Freeze(),UriSource不要使用http://的形式(可以Down到本地目录进行使用)。