C# dispose释放资源问题 c# 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1. 个人看法:dispose是实现释放非托管资源的。托管资源由系统控制,不需要考虑释放问题。话说,你为何禁用垃圾回收?2。值类型对象,肯定是托管资源。值类型是存在栈空间里的,随着系统入栈出栈,它自然就被释放了。 你是怎样“禁用垃圾回收”的?垃圾回收不可能被禁用。如果你把“通知不执行 finalize 操作”叫做“禁用垃圾回收”,这显然是错误的!大多数人口口声声所谓的“释放”其实是人云亦云的梦话。我不知道这些人说的是什么,问了他们也说不清!在dispose中要执行什么动作,每一个类都不一样。但是无论如何,这不是什么必须的动作。如果你不做,在对象的 finalize 操作中还会调用 dispose。所以通常你根本无需画社舔足地去显式调用 dispose 方法。 比如说你使用 SqlConnection 对象实例,如果你调用 Dispose 方法,那么就会自动调用其 Close 方法,从而释放物理连接给连接池。因此需要在 Using{ } 中使用它来保证(无论运行中是否抛出异常,都)调用 Dispose,而不是让GC 时再去再 Finalize 过程中自动调用 Dispose,从而避免连接池中的链接“用尽”的情况发生。这里,只有你知道所谓的“释放资源”到底是什么资源,你才能知道调用 Dispose 是否必要。如果没有必要调用,就不要调用 Dispose,因为 Dispose 方法会自动被调用的,用不着你显式调用它。同样地,如果你说“值类型的对象是否需要调用Dispose来释放资源”,我根本无法回答。因为这根本就是瞎掰的问题。你只有看看 Dispose 方法里边到底干了什么,才知道所谓的“释放”到底指什么。不要想当然地瞎猜什么“释放资源”这种看似挺厉害、其实没有内涵的词儿,不要空洞地一遍遍说“释放资源”这种话。 1. 在标准dispose模式中,在dispose释放托管资源时,如果有遗漏的托管资源未被释放,此时已经禁用垃圾回收,会有什么后果?“如果有遗漏的托管资源未被释放”这个是bug好不好。“禁用垃圾回收”,这个好强大,如果这样,是CLR的bug好不好。2. 在标准dispose模式中,值类型对象,未实现IDisposable接口的对象是否需要释放,或者如何释放未实现IDisposable接口的对象是否需要释放,这个要问写这个类型的人自己了。 抱歉,我没有表达清楚.现在大概理解了,GC回收对象的时候,先调用析构器让对象拥有自主释放资源的能力,再回收对象的成员变量.而dispose方法在释放托管资源的时候是自由的,之所以仅在主动调用时释放托管资源是想让对象成员所引用的对象尽快释放.而交给GC的话,引用变量会立即释放,但是引用的对象会稍后一些.应该是这样吧. c#开启外部程序??? 有列1234删除2后如何自动恢复如1,2,3,而不是1,3,4 求思路~关于字符串的 为什么我的MediaPlayer找不到currentposition属性啊? 实现两个窗口通讯,父窗口来改变弹出窗口的值。请大家看看这段代码,不知道怎么回事 请问C#能不能像C++一样跟DX一起作游戏呀? 优先级 检测一个字符串是否存在,用什么技术比较好? TreeView 中的节点如何赋值呢? 在线等待:请问有关asp.net开发中的Codebehind技术,能不能改成调用bin目录下的.dll文件 表没有主键。 大神请进来指教指教。.net C# .txt的读取
2。值类型对象,肯定是托管资源。值类型是存在栈空间里的,随着系统入栈出栈,它自然就被释放了。
你是怎样“禁用垃圾回收”的?垃圾回收不可能被禁用。如果你把“通知不执行 finalize 操作”叫做“禁用垃圾回收”,这显然是错误的!大多数人口口声声所谓的“释放”其实是人云亦云的梦话。我不知道这些人说的是什么,问了他们也说不清!在dispose中要执行什么动作,每一个类都不一样。但是无论如何,这不是什么必须的动作。如果你不做,在对象的 finalize 操作中还会调用 dispose。所以通常你根本无需画社舔足地去显式调用 dispose 方法。
“如果有遗漏的托管资源未被释放”这个是bug好不好。“禁用垃圾回收”,这个好强大,如果这样,是CLR的bug好不好。
2. 在标准dispose模式中,值类型对象,未实现IDisposable接口的对象是否需要释放,或者如何释放
未实现IDisposable接口的对象是否需要释放,这个要问写这个类型的人自己了。
而dispose方法在释放托管资源的时候是自由的,之所以仅在主动调用时释放托管资源是想让对象成员所引用的对象尽快释放.
而交给GC的话,引用变量会立即释放,但是引用的对象会稍后一些.
应该是这样吧.