Question

Désolé si je me manque quelque chose évidente, mais je suis en train de supprimer les contrôles (une série de contrôles utilisateur) d'un FlowLayoutPanel - (panelName) .Controls.Clear () ;. Malheureusement, cela ne semble pas appeler les destructeurs pour les objets du panneau - l'utilisateur Objets colonne dans le gestionnaire de tâches ne cesse de monter et plus, jusqu'à ce qu'il frappe 10 000 et jette un excecption

.

Quelqu'un sait-il ce que je suis absent ici?

Était-ce utile?

La solution

Pas une solution, mais une solution de contournement - les objets ne semblent être détruits par cette (rugueux, de la mémoire) Code:

while(FlowLayoutPanel.Controls.Count > 0)
     FlowLayoutPanel.Controls.Remove(0);

Autres conseils

La solution de eftpotrm ci-dessus encore gardé l'utilisateur manipule le nombre de plus en plus pour moi, cependant, si vous venez de jeter manuellement après avoir retiré le contrôle, qui a fixé à 100% pour moi.

while (myFlowLayoutPanel.Controls.Count > 0)
{
     var controltoremove = myFlowLayoutPanel.Controls[0];
     myFlowLayoutPanel.Controls.Remove(controltoremove);
     controltoremove.Dispose();
}

.NET ne pas le concept de Destructeurs. .NET a quelque chose appelé « finalizers » qui ressemblent syntaxiquement comme en C # Destructeurs. Pour plus d'informations, consultez livre impressionnant de Jeff Richter sur la façon dont fonctionne le CLR - CLR via C # .

Vous pouvez les objets à mettre en œuvre le modèle IDisposable, puis appeler leur méthode Dispose () lorsque vous avez terminé avec eux.

Essayez d'utiliser un (par exemple profileur mémoire , href="http://www.red-gate.com/products/ANTS_Memory_Profiler/index.htm" rel="nofollow noreferrer"> fourmis ), il vous dira ce qui est de garder le contrôle en vie. Essayer de 2 pense que ce type de problème est très difficile.

Rouge porte donne 14 jours queue qui devrait être plus de suffisamment de temps pour virer de bord vers le bas ce problème et décider si un profileur de mémoire vous fournit la valeur à long terme.

Il y a beaucoup d'autres profileurs de mémoire sur le marché (par exemple Profiler .NET Memory ), la plupart d'entre eux ont des essais libres, mais j'ai trouvé que le Red-Gate outils sont faciles à l'utilisation, ont donc tendance les essayer d'abord.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top