繁体   English   中英

IDisposable的

[英]IDisposable

我正在尝试使一个班级无法解决问题,并且刚刚完成。 我的问题是如何识别要关闭的句柄// 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;
        }
    } 

您尚未显示实际使用该句柄的任何代码。 您真的确定需要实现IDisposable并首先拥有一个句柄吗? 您要使用什么非托管资源?

是你,或许只是下面你看到的其他地方这使用手柄模式? 您仅应在实际需要时实现IDisposable实现终结器的情况很少见(因为您可以使用SafeHandle代替IntPtr来处理句柄)。

您要关闭什么把手? 我看不到任何分配了手柄的东西。

另外-在很多情况下,您可以使用SafeHandle简化操作-我无法确定这是否适用于您的情况,因为我看不到发生了什么...

_cont =(int)(matriz_binaria.Compute(“ COUNT(TID)”,strExpr)); 对于每个段落,问题不是增加内存的使用,我认为最主要的是因为它是垃圾。 我的想法是创建一个类以避免内存增长。 已经放置了_cont变量= 1且对内存没有影响,这会引发intrucção内存,并且每个段落的目的和效果都与清理使用此指令this._cont =(int )(matriz_binaria.Compute(“ COUNT(TID)”,strExpr)); **

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM