0

私は、問題を解決できない終了したばかりのクラスを動作させるように適応させようとしています。私の質問は、//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;
        }
    } 
4

3 に答える 3

2

実際にハンドルを使用するコードは示していません。IDisposableそもそも実装してハンドルを持つ必要があると本当に確信していますか? どのアンマネージ リソースを使用しようとしていますか?

おそらく、他の場所で見たハンドルを使用するパターンに従っていただけでしょうか? IDisposable実際に必要な場合にのみ実装する必要があります。最近では、ファイナライザーの実装は非常にまれです (ハンドルSafeHandleの代わりに使用できるため)。IntPtr

于 2009-06-01T08:56:21.093 に答える
2

どのハンドルを閉じようとしていますか? ハンドルを割り当てるものは何も見えません。

また、多くの場合SafeHandle、これをより簡単にするために使用できます-何が起こっているのかがわからないため、これがあなたのケースに当てはまるかどうかはわかりません...

于 2009-06-01T08:58:03.963 に答える
0

アイデアは、この命令を終了することですthis._cont = (int)(matriz_binaria.Compute("COUNT(TID)", strExpr)); 各パッセージに問題があるのは、メモリの使用量を増やすことではありません。私の考えは、メモリの増加を避けるためにクラスを作成することでした。既に _cont 変数 = 1 を配置しており、メモリに影響を与えていませんでした。これにより、メモリへの影響が発生するという問題があり、各パッセージの目的と効果は、この命令で作成されたガベージ メモリをクリーンアップすることに関心がありました this._cont = (int )(matriz_binaria.Compute("COUNT(TID)", strExpr));**

ありがとう

于 2009-06-01T10:32:32.337 に答える