Meine Anwendung verwendet eine benutzerdefinierte Liste, die von Bindinglist erbt, die dann an alle UI-Steuerelemente gebunden ist. Die Liste ist eine Sammlung von Basisobjekten, die INotifyPropertyChanged implementiert. Ich vermutete einen Speicherverlust und profilierte meine Anwendung mit memprofiler, die bestätigte, dass alle meine Listen nie entsorgt werden und an denen sie festhalten, weil sie die propertyChanged-Eventhandler der Bindungsliste abonniert haben. HierBindingList-Speicherverlust
ist die Probe meiner Objekte
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);
}
}
Hier ist die Zuordnung Stapel aus dem Profiler
[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
mir jemand angeordnet in immer die Listen helfen können.
Dank all
Henk, waren Sie recht. Das Problem war nicht mit dem Code, den ich erwähnt habe, sondern ich habe ihn auf Delegierte beschränkt, die verhindern, dass meine Form entsorgt wird. Ich arbeite an einer Probe, um das Problem zu replizieren, das ich auf die Seite hochladen werde. Danke