我的應用程序使用一個自定義的List,它繼承自Bindinglist,然後綁定到所有的UI控件。該列表是實現INotifyPropertyChanged的baseobjects的集合。我懷疑有內存泄漏,並使用 memprofiler對我的應用程序進行了描述,它確認我的所有列表從不處理,並且由於它們訂閱了綁定列表的propertyChanged事件處理程序,所以它們正在執行。BindingList內存泄漏
這裏是我的對象
public abstract class BaseObject:IDataErrorInfo,INotifyPropertyChanged,ICloneable
{
private Guid _Id = Guid.NewGuid();
public virtual Guid ID
{
get { return this._Id; }
set { this._Id = value; this.OnPropertyChange(new
PropertyChangedEventArgs(propertyName)); }
}
[field:NonSerialized]
public virtual event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChange(PropertyChangedEventArgs e)
{
if (this.PropertyChanged != null) this.PropertyChanged(this, e);
}
}
[Serializable]
public class BaseList<T> :BindingList<T>,ICloneable where T:BaseObject
{
public new void Add(T item)
{
<Custom code>
base.Add(item);
}
public new void Remove(T item)
{
<Custom Code>
base.Remove(item);
}
}
的樣本下面是從探查分配棧
[Skipped frame(s)]
mscorlib!System.MulticastDelegate.CombineImpl(Delegate)
mscorlib!System.Delegate.Combine(Delegate, Delegate)
<AppName>.Data!<AppName>.Data.BaseObject.add_PropertyChanged(
PropertyChangedEventHandler)
[Skipped frame(s)]
System!System.ComponentModel.BindingList<T>.InsertItem(int, T)
mscorlib!System.Collections.ObjectModel.Collection<T>.Add(T)
<AppName>.Data.BaseList<T>.Add(T) BaseList.cs
<AppName>.UI.Forms.Form1.GetData() Form1
<AppName>.UI.Forms.Form1.Initialize() Form1
<AppName>.UI.Forms.Form1.RunAsyncComplete() Form1
有人可以幫助我在得到安置名單。
感謝所有
亨克,你是對的。問題不在於我提到的代碼,而是我縮小了代碼,這些代表阻止了我的表單被處置。我正在處理一個示例以複製我將上傳到網站的問題。謝謝