IDisposable - PullRequest
       7

IDisposable

0 голосов
/ 01 июня 2009

Я пытаюсь настроить класс для работы с только что законченным, что я не могу решить проблему. Мой вопрос, как определить дескриптор для закрытия // CloseHandle (дескриптор). Моя проблема в том, что я не могу адаптировать следующий код.

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;
        }
    } 

Ответы [ 3 ]

2 голосов
/ 01 июня 2009

Какую ручку вы пытаетесь закрыть? Я не вижу ничего, что выделяет дескриптор.

Также - во многих случаях вы можете использовать SafeHandle, чтобы сделать это проще - я не могу сказать, применимо ли это в вашем случае, так как я не могу видеть, что происходит ...

2 голосов
/ 01 июня 2009

Вы не показали ни одного кода , используя дескриптор. Вы действительно уверены, что вам нужно реализовать IDisposable и иметь ручку в первую очередь? Какой неуправляемый ресурс вы пытаетесь использовать?

Возможно, вы просто следовали шаблону, который вы видели в другом месте, в котором использовал ручку? Вы должны реализовывать IDisposable только тогда, когда вам это действительно нужно - и реализация финализатора должна быть очень редкой в ​​наши дни (поскольку вы можете использовать SafeHandle вместо IntPtr для дескрипторов).

0 голосов
/ 01 июня 2009

идея состоит в том, чтобы закончить эту инструкцию использование памяти, я думаю, больше всего потому, что это мусор. моя идея заключалась в том, чтобы создать класс, чтобы избежать роста памяти. Уже поместили переменную _cont = 1 и не оказали влияния на память, и проблема в том, что это поднимает внутреннюю память, а цель и результат каждого прохода были заинтересованы в очистке мусорной памяти, которая создается с помощью этой инструкции this._cont = (int ) (matriz_binaria.Compute ("COUNT (TID)", strExpr)); **

Спасибо

...