Pourquoi les gens pensent-ils qu'une fuite de mémoire dans .NET n'est pas la même chose qu'une autre fuite?
Une fuite de mémoire se produit lorsque vous vous attachez à une ressource et ne la laissez pas partir. Vous pouvez le faire à la fois en codage géré et non géré.
En ce qui concerne .NET et d'autres outils de programmation, il y a eu des idées sur le ramassage des ordures et d'autres moyens de minimiser les situations qui feront fuir votre application. Mais la meilleure méthode pour éviter les fuites de mémoire consiste à comprendre votre modèle de mémoire sous-jacent et son fonctionnement sur la plate-forme que vous utilisez.
Croire que GC et d'autres magies nettoieront votre désordre est le chemin le plus court vers les fuites de mémoire, et sera difficile à trouver plus tard.
Lors du codage non géré, vous vous assurez normalement de nettoyer, vous savez que les ressources que vous prenez en main seront de votre responsabilité de nettoyer, pas celles du concierge.
Dans .NET en revanche, beaucoup de gens pensent que le GC va tout nettoyer. Eh bien, il en fait pour vous, mais vous devez vous assurer qu'il en est ainsi. .NET englobe beaucoup de choses, vous ne savez donc pas toujours si vous avez affaire à une ressource gérée ou non gérée, et vous devez vous assurer de ce à quoi vous avez affaire. La gestion des polices, des ressources GDI, de l'annuaire actif, des bases de données, etc. est généralement des choses que vous devez rechercher.
En termes gérés, je vais mettre mon cou en jeu pour dire qu'il disparaît une fois que le processus est tué / supprimé.
Je vois que beaucoup de gens ont cela, et j'espère vraiment que cela prendra fin. Vous ne pouvez pas demander à l'utilisateur de mettre fin à votre application pour nettoyer votre désordre! Jetez un œil à un navigateur, qui peut être IE, FF, etc., puis ouvrez, disons, Google Reader, laissez-le rester pendant quelques jours et regardez ce qui se passe.
Si vous ouvrez ensuite un autre onglet dans le navigateur, surfez sur un site, puis fermez l'onglet qui hébergeait l'autre page qui a fait la fuite du navigateur, pensez-vous que le navigateur libérera la mémoire? Ce n'est pas le cas avec IE. Sur mon ordinateur, IE consommera facilement 1 Gio de mémoire en peu de temps (environ 3-4 jours) si j'utilise Google Reader. Certaines pages d'actualités sont encore pires.