2010-11-07 42 views
2

Je suis nouveau dans GC, Si je veux lancer un tableau datatable, est-ce que l'appel de disposer() sur toutes ses datatables est suffisant? Ai-je besoin de définir null sur le tableau de la base de données? ou à chaque datatable?Garbage Collection disposer d'un tableau Datatable dans C#

est-ce suffisant ?:

DataTable[] myTables = null; 
      try 
      { 
       myTables = DB.GetTables(); 

       // use myTables.... 
      } 
      finally 
      { 
       // Dispose Data Tables 
       if (myTables != null) 
       { 
        foreach (DataTable dt in myTables) 
        { 
         if (dt != null) 
          dt.Dispose(); 
        } 
       } 
      } 
+0

Garbage Collector est appelé lui-même lors de la mise au rebut de l'application –

Répondre

3

Pour la collecte des ordures que vous devez faire rien.

Étant donné que DataTable implémente IDisposable, il est judicieux d'appeler Dispose() sur chacun d'entre eux (comme vous le faites). La définition de références à null n'est nécessaire que dans de très rares cas. Pas ici.

Mais Dispose() consiste à libérer des ressources gérées et non gérées, pas à propos de la récupération de place.
Pour DataTbales Dispose() n'est pas réellement nécessaire, mais vous ne voulez pas vous en inquiéter. Si une classe a un membre Dispose(), appelez-le.

+0

Cela me fait lire "si vous faites quelque chose, comme éliminer des choses ou annuler, GC se cassera". Comme dans, comme c'est une exigence que vous ne touchez à rien. Juste FYI. – cHao

+0

@Chao, j'ajoutais un peu plus de texte. –

+0

La mise au rebut d'objets qui implémentent IDisposable est une bonne pratique générale, même avec un garbage collector. –

2

Non, vous n'avez rien d'autre à faire.

Le garbage collector sait quand le tableau n'est plus utilisé, et à partir de ce point dans le code, il peut collecter le tableau et tout ce qu'il contient. La définition de la référence de tableau ou de toute référence de table de données à null est uniquement un travail inutile.

1

La récupération de place est un processus très coûteux. C'est pourquoi Microsoft a décidé de l'automatiser pour qu'il s'exécute lorsque le système a la capacité de l'exécuter ou lorsque les ressources deviennent trop faibles. Par conséquent, en règle générale, vous ne devez vous soucier que de la récupération de place explicite lorsque vous travaillez avec des objets non gérés (tels que des références COM) ou lorsque vous rencontrez des problèmes de performances. aider.

+1

Dans le monde .net, la seule "collecte manuelle des ordures" appelle directement GC.Collect(), et il n'y a pratiquement aucune raison de le faire. Vous faites peut-être référence à des produits jetables, auquel cas vous voudrez peut-être le mentionner. – cHao

+0

merci cHao. Totalement d'accord avec toi. Peut-être que je me trompe, mais lorsque j'ai répondu à la question, je n'ai pas vu le mot "jetable" là, et ma réponse laconique ne portait que sur GC. – Topdown