Mon application utilise une liste personnalisée qui hérite de Bindinglist qui est ensuite liée à tous les contrôles de l'interface utilisateur. La liste est une collection de baseobjects qui implémente INotifyPropertyChanged. J'ai suspecté une fuite de mémoire et profilé mon application en utilisant memprofiler qui a confirmé que toutes mes listes ne sont jamais éliminées et qu'elles sont accrochées car elles sont abonnées aux gestionnaires d'événements propertyChanged de la liste de liaison.BindingList fuite de mémoire
Voici l'exemple de mes objets
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);
}
}
Voici la pile d'allocation du profileur
[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
quelqu'un peut me aider à obtenir les listes disposées.
Merci à tous
Henk, vous aviez raison. Le problème ne résidait pas dans le code que j'ai mentionné, mais je l'ai réduit aux délégués qui empêchent que mon formulaire soit éliminé. Je travaille sur un échantillon pour reproduire le problème que je vais télécharger sur le site. Merci