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引发intrucção内存的问题,而每一段的目的和效果都是有兴趣清理用这条指令创建的垃圾内存this._cont = (int )(matriz_binaria.Compute("COUNT(TID)", strExpr));**

谢谢

于 2009-06-01T10:32:32.337 回答