看到别人写的代码,有以下的Dispose(),不知何用?高手给讲一讲。
就是系统何时会调用到它,调用时会怎样?谢谢!
protected override void Dispose(bool disposing)
        {
            if (m_lRealHandle >= 0)
            {
                CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle);
            }
            if (m_lUserID >= 0)
            {
                CHCNetSDK.NET_DVR_Logout_V30(m_lUserID);
            }
            if (m_bInitSDK == true)
            {
                CHCNetSDK.NET_DVR_Cleanup();
            }
            if (disposing)
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }

解决方案 »

  1.   

    当不需要使用该对象或资源的时候就会调用Dispose来释放对象所占的内存空间,例如窗体的Dispose方法会在关闭窗体的时候被调用,你可以在Designer.cs文件的Dispose设置断点看看的,当关闭窗体的时候,此时DisPose方法就会被调用
      

  2.   

    Dispose的主要目的是用来释放非托管资源,当然它也能释放托管资源,但托管资源的管理很完善,如果托管资源不足,.net会自动释放,但非托管资源.net是无法管理的,也无法释放,所以必须要用一个方法来释放,所以就设计了Dispose这个方法,当然很多对象也由类似Close之类的方法来释放非托管资源,
      

  3.   

    给你讲一个例子说说什么是非托管资源
    .NET运行的代码在一个进程,数据库运行在另外一个进程
    .NET访问数据库 .Open()
    接下来.net代码本来是想进行一些查询的,但自己的代码出错了~运行不下去了
    所以数据库被Open后,一直在等待~在等待~....所以非托管资源基本上不是和.NET应用程序在同一个进程,
    因为在同一个进程的话,.NET的垃圾回收机制会监控它不要让别人等待下去,记得释放~
    最好用上finnaly,就是代码错了,也要释放~
      

  4.   

    用于释放 非托管资源,不如sqlconnection