Ho rintracciato una perdita di memoria e l'ho ridotta a un ToolTip assegnato in una classe derivata da UserControl.Come automatizzare la pulizia di ToolTip in UserControl
La finestra a scomparsa viene allocato nel allocato nel costruttore del controllo e inizializzato nell'evento Load simili: genitore
public class CommonProfile : System.Windows.Forms.UserControl
{
private ToolTip toolTip1;
...
public CommonProfile()
{
InitializeComponent();
// Create the ToolTip and associate with the Form container.
toolTip1 = new ToolTip(this.components);
}
private void CommonProfile_Load(object sender, System.EventArgs e)
{
// Set up the delays for the ToolTip.
toolTip1.AutoPopDelay = 5000;
toolTip1.InitialDelay = 1000;
toolTip1.ReshowDelay = 500;
// Force the ToolTip text to be displayed whether or not the form is active.
toolTip1.ShowAlways = true;
// Set up the ToolTip text
toolTip1.SetToolTip(this.btnDeleteEntry, "Delete this Profile");
toolTip1.SetToolTip(this.lblProfileType, "Edit this Profile");
toolTip1.SetToolTip(this.lblProfileData, "Edit this Profile");
toolTip1.SetToolTip(this.picFlagForUpdate, "Toggle Flag for Update");
}
}
del controllo ha una durata che supera durata del controllo. Questo controllo viene creato al volo e aggiunto a un controllo del pannello e successivamente rimosso dal controllo del pannello.
Ho trovato che il membro Dispose del controllo non è stato chiamato, apparentemente perché i riferimenti a ToolTip rimangono.
ho aggiunto un metodo Shutdown come questo:
public void Shutdown()
{
toolTip1.RemoveAll();
}
chiamata al metodo Shutdown elimina la perdita e Dispose viene infine chiamato.
Sfortunatamente, questa soluzione richiede che chiunque utilizzi il controllo si ricordi di chiamare il metodo Shutdown quando ha finito con esso.
Mi piacerebbe sapere se è possibile automatizzarlo in qualche modo in modo che avvenga senza la necessità di chiamare esplicitamente il metodo di spegnimento.
Immagino che sia necessario chiamare il tooltip sia nel deploy del tuo usercontrol, sia che tu possa avere una funzione clean up che lo fa per te, come il tuo metodo shutDown. – PRR
1. Guardate qui [http://stackoverflow.com/questions/672980/dispose-on-user-controls-really-meant-to-edit-the-designer-cs-file][1] [1]: http://stackoverflow.com/questions/672980/dispose-on-user-controls-really-meant-to-edit-the-designer-cs-file – VMykyt