Dispose() 起什么作用?

foxd 2013-05-29 10:55:11
看到别人写的代码,有以下的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);
}
...全文
1062 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
人生导师 2013-05-30
  • 打赏
  • 举报
回复
当不需要使用该对象或资源的时候就会调用Dispose来释放对象所占的内存空间,例如窗体的Dispose方法会在关闭窗体的时候被调用,你可以在Designer.cs文件的Dispose设置断点看看的,当关闭窗体的时候,此时DisPose方法就会被调用
masteng 2013-05-30
  • 打赏
  • 举报
回复
"比如",写错了
masteng 2013-05-30
  • 打赏
  • 举报
回复
用于释放 非托管资源,不如sqlconnection
moonwrite 2013-05-30
  • 打赏
  • 举报
回复
给你讲一个例子说说什么是非托管资源 .NET运行的代码在一个进程,数据库运行在另外一个进程 .NET访问数据库 .Open() 接下来.net代码本来是想进行一些查询的,但自己的代码出错了~运行不下去了 所以数据库被Open后,一直在等待~在等待~.... 所以非托管资源基本上不是和.NET应用程序在同一个进程, 因为在同一个进程的话,.NET的垃圾回收机制会监控它 不要让别人等待下去,记得释放~ 最好用上finnaly,就是代码错了,也要释放~
advisd 2013-05-30
  • 打赏
  • 举报
回复
引用 3 楼 stonespace 的回复:
Dispose的主要目的是用来释放非托管资源,当然它也能释放托管资源,但托管资源的管理很完善,如果托管资源不足,.net会自动释放,但非托管资源.net是无法管理的,也无法释放,所以必须要用一个方法来释放,所以就设计了Dispose这个方法,当然很多对象也由类似Close之类的方法来释放非托管资源,
++ 这个一般系统都会自动调用,系统会在某个时间自动调用,也可以手动调用,提前回收资源。
宝_爸 2013-05-30
  • 打赏
  • 举报
回复
用于释放 非托管资源,因为垃圾收集机制没法释放非托管资源
stonespace 2013-05-30
  • 打赏
  • 举报
回复
Dispose的主要目的是用来释放非托管资源,当然它也能释放托管资源,但托管资源的管理很完善,如果托管资源不足,.net会自动释放,但非托管资源.net是无法管理的,也无法释放,所以必须要用一个方法来释放,所以就设计了Dispose这个方法,当然很多对象也由类似Close之类的方法来释放非托管资源,
qldsrx 2013-05-29
  • 打赏
  • 举报
回复
相当于C++的析构函数,在对象销毁时系统自动调用,而对象是否会被销毁则看对象的引用是否存在。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧