2009-06-01 8 views
0

J'essaie d'adapter une classe pour travailler avec juste fini que je ne peux pas résoudre le problème. Ma question est comment identifier le handle pour fermer// CloseHandle (handle). Mon problème est que je ne suis pas capable d'adapter le code suivant.IDisposable

for (Int32 i = 0; i < temp_items.Count; i++) 
{ 
     string conj_itens = temp_itens[i].ToString(); 
     ContarSuporte cs= new ContarSuporte(matriz_bin,strExpr); 
_cont = cs.Suporte; 
     If (_cont>100) 
    { 
    list.add(conj_itens); 
    } 

} 


public class ContarSuporte: IDisposable 
{ 
    private int _cont; 
    private bool disposed = false; 
    private IntPtr handle; 

    public ContarSuporte() 
    { 
    } 

    public ContarSuporte(DataTable matriz_binaria, string strExpr) 
    { 
     int c = matriz_binaria.Rows.Count; 
     this._cont = (int)(matriz_binaria.Compute("COUNT(TID)", strExpr)); 
    } 
    ~ContarSuporte() 
    { 

     Dispose(false); 

    } 
    public void Dispose() 
    { 
     //GC.Collect(); 
     Dispose(true); 
     GC.SuppressFinalize(this); 
     // GC.Collect(); 
    } 

    private void Dispose(bool disposing) 
    { 
     if (!this.disposed) 
     { 
      if (disposing) 
      { 
       //this.Dispose(); 
      } 
      //CloseHandle(handle); 
      handle = IntPtr.Zero; 

     } 
     disposed = true; 
    } 

    public int Suporte 
    { 
     get 
     { 
      return _cont; 
     } 
     set 
     { 
      _cont =value; 
     } 
    } 

Répondre

2

Vous ne l'avez pas montré tout code fait à l'aide la poignée. Êtes-vous vraiment sûr que vous devez mettre en œuvre IDisposable et avoir une poignée en premier lieu? Quelle ressource non gérée essayez-vous d'utiliser?

Est-ce que vous suiviez peut-être un modèle que vous avez vu ailleurs et que utilisait-il? Vous ne devriez implémenter IDisposable que lorsque vous en avez vraiment besoin - et mettre en œuvre un finaliseur devrait être très rare ces jours-ci (comme vous pouvez utiliser SafeHandle au lieu de IntPtr pour les poignées).

+0

Merci pour les réponses, le problème est ici, et crée de beaucoup dans de nombreux passages LOPP faites par les données poubelle en mémoire que je ne suis pas en mesure de contrôler, comment puis-je contrôler this this._cont = (int) (matriz_binaria.Compute ("COUNT (TID)", strExpr)); –

+0

La création d'un grand nombre d'objets en mémoire n'est pas du tout la même chose que d'avoir besoin d'IDisposable ou de handles. Encore une fois: avez-vous des ressources * non gérées * dont vous devez disposer? –

2

Quelle poignée essayez-vous de fermer? Je ne vois rien qui alloue un handle.

aussi - dans de nombreux cas, vous pouvez utiliser SafeHandle pour faire de ce simple - je ne peux pas dire si cela vaut dans votre cas, puisque je ne vois pas ce qui se passe ...

0

l'idée est pour terminer cette instruction this._cont = (int) (matriz_binaria.Compute ("COUNT (TID)", strExpr)); à chaque passage, le problème n'est pas d'augmenter l'utilisation de la mémoire, je pense que le plus est parce que c'est la poubelle. mon idée était de créer une classe pour éviter la croissance de la mémoire. Déjà placé la variable _cont = 1 et n'avait aucun impact sur la mémoire, et le problème que cela soulève intrucção mémoire, et le but et l'effet de chaque passage était intéressé à nettoyer la mémoire de déchets qui est créée avec cette instruction this._cont = (int) (matriz_binaria.Compute ("COUNT (TID)", strExpr)); **

Merci

Questions connexes