Oui, il y a a fuite selon la définition que vous donnez à une FUITE et le temps écoulé...
Si par "fuite" vous entendez "la mémoire reste allouée, non disponible pour l'utilisation, même si vous avez fini de l'utiliser" et par "dernière" vous entendez n'importe quel moment après avoir appelé "dispose", alors oui, il peut y avoir une fuite, bien qu'elle ne soit pas permanente (c'est-à-dire pour toute la durée d'exécution de vos applications).
Pour libérer la mémoire gérée utilisée par le MemoryStream, vous devez le déréférencer en annulant votre référence à celui-ci, de sorte qu'il devient immédiatement éligible à la collecte des déchets. Si vous ne le faites pas, vous créez une fuite temporaire à partir du moment où vous avez fini de l'utiliser, jusqu'à ce que votre référence sorte du champ d'application, car entre-temps la mémoire ne sera pas disponible pour l'allocation.
L'avantage de l'instruction using (par rapport au simple appel à la fonction dispose) est que vous pouvez DECLARE votre référence dans l'instruction using. À la fin de l'instruction using, non seulement l'instruction dispose est appelée, mais votre référence sort de sa portée, ce qui annule effectivement la référence et rend votre objet éligible à la collecte des déchets immédiatement, sans que vous ayez à vous souvenir d'écrire le code "reference=null".
Bien que le fait de ne pas déréférencer quelque chose immédiatement ne constitue pas une fuite de mémoire "permanente" classique, cela a certainement le même effet. Par exemple, si vous gardez votre référence au MemoryStream (même après avoir appelé dispose), et qu'un peu plus loin dans votre méthode vous essayez d'allouer plus de mémoire... la mémoire utilisée par votre flux de mémoire toujours référencé ne sera pas disponible pour vous jusqu'à ce que vous annuliez la référence ou qu'elle sorte de la portée, même si vous avez appelé dispose et que vous avez fini de l'utiliser.
43 votes
Demandez à votre examinateur exactement pourquoi il pense que vous devriez le fermer. S'il parle de bonnes pratiques générales, il est probablement intelligent. S'il parle de libérer la mémoire plus tôt, il a tort.
0 votes
Question connexe avec des opinions quelque peu différentes de celles présentées dans les réponses ici : MemoryStream.Close() ou MemoryStream.Dispose() .