2010-09-05 10 views
2

lorsque nous utilisons l'aide pour définir un objet par exemple:à l'aide dans la définition de l'objet en C#

 using (Login objLogin = new Login()) 

je sais que nous utilisons quand nous voulons nettoyer la mémoire après avoir utilisé cet objet, mais je ne sais pas quand doit nous nettoyons la mémoire.

Répondre

1

Chaque fois qu'un objet est à usage unique (il implémente IDisposable interface) cela signifie qu'il utilise probablement des ressources non gérées qui ne peuvent pas être gérées par garbage collector et donc si votre objet est collecté ces les ressources peuvent rester dans la mémoire causant des problèmes. La solution à ce problème est:

1.Pour implémenter l'interface IDisposable dans ce type d'objets et pour effacer/fermer les ressources non managées dans la méthode Dispose (par exemple, si vous utilisez un objet jetable dans votre objet, il vaut mieux 2. Pour appeler la méthode Dispose des objets jetables lorsqu'ils ne sont plus nécessaires, mais attention car la réutilisation d'un objet éliminé peut entraîner des exceptions. La syntaxe à l'aide que vous avez mentionné est un moyen peu de faire la même chose et il interprète ceci:

using(var obj=new myDisposableObject) 
{ 
obj.Something(); 
} 

en suivant:

var obj=new myDisposableObject(); 
    try 
    { 
    obj.Something(); 
    } 
    catch 
    { 
    throw; 
    } 
    finally 
    { 
    obj.Dispose(); 
    } 

donc vous pouvez toujours être sûr que quoi qu'il arrive la méthode Dispose votre objet est toujours appelé.

+0

merci, mais je didint comprendre la dernière ligne de votre réponse, donc .... je veux savoir quand un objet utilise des ressources non gérées? – Arash

+0

@arash: Je veux dire que même si une exception se produit, la méthode Dispose sera toujours appelée. Généralement, si un objet est jetable, cela signifie qu'il utilise des ressources non gérées. Sinon, il n'y a pas de moyen simple de réaliser qu'un objet utilise des ressources non-remaniées. – Beatles1692

3

L'instruction using doit être utilisée pour disposer rapidement des objets qui implémentent IDisposable. Cela ne nettoie pas réellement la mémoire gérée mais permet à un objet géré de libérer toutes les ressources non managées qu'il peut contenir et, dans certains cas, supprime les références aux objets gérés pour éviter les fuites de mémoire.

Je vous suggère de lire sur les sites suivants qui fournissent des explications détaillées des deux IDisposable et la déclaration using

0

Vous ne nettoyez pas la mémoire; l'objet implémentant IDisposable nettoiera ses ressources non managées dans sa méthode Dispose (ou du moins, c'est l'implication que la classe est en train de faire en implémentant IDisposable), et .NET nettoiera la mémoire quand l'objet sera collecté.