2011-08-23 3 views
1

Compte tenu de l'extrait de code suivant et donnant sur l'absence d'un en utilisant clause ou une disposition explicite:fuites d'élimination et de la mémoire UnmanagedMemoryStream


    public static Image GetImage(string imageName) 
    { 
     Image image = null; 
     Stream unmanagedMemoryStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(imageName); 
     image = Image.FromStream(unmanagedMemoryStream); 
     return image; 
    } 
 

Quand vous débarrasserez() être appelé UnmanagedMemoryStream? Comment cela changerait-il si la méthode contenante était rendue non statique? Une fuite de mémoire non gérée est-elle possible dans cette situation?

Répondre

2

En plus de la réponse de Jon - changer la méthode pour non-statique n'aura aucun effet. Le fait que vous ayez une variable Image locale dans une méthode statique ne change rien - c'est juste une référence sur la pile pour un objet sur le tas. Lorsque la méthode se termine, la référence est supprimée de la pile. Donc, que la méthode soit statique ou non ne change rien en termes de fuites de mémoire.

La possibilité de fuite de mémoire ici est si l'image n'est jamais éliminée et jamais nettoyée.

+0

Marqué comme la réponse parce que bien que Jon est arrivé en premier, vous avez répondu à toutes mes questions, pas seulement la première. – nukefusion

5

Lorsque image est disposé, qui disposera du flux - Image.FromStream prend effectivement en charge le flux qu'il est donné.

En particulier, si vous avez disposer le flux dans une instruction using ici, l'image serait inutilisable, au moins pour certains types d'image.