C#怎么样将对象手动释放?

J&TT 2009-10-24 07:12:15
在c#中,我想在主程序执行过程中手动释放对象所占内存,应该怎么做,我的测试代码如下:
using System;

namespace ch

{
class A
{
~A()
{
Console.WriteLine("The disconstructor called!!");
}
}
class Test
{
static void Main()
{
A a=new A();
Console.WriteLine("haha");
}
}
}

得到的结果是
haha
The disconstructor called!!

这说明对象是在程序执行结束后才调用析构函数予以释放。
但是,怎么样才能让对象在结束之前手动释放呢?谢谢大家了!
...全文
542 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yizhili 2009-10-24
  • 打赏
  • 举报
回复
刚才漏了,C# 有个函数,GC.Collect 可以强制执行垃圾回收,如果这样写:

A a = new A()
GC.Collect()
Console.WriteLine( "haha" );

就能在输出 haha 前调用 ~A()

不过这个函数会回收所有超出生存期的对象,效率极低下,用前请三思
yizhili 2009-10-24
  • 打赏
  • 举报
回复
using 只对用实现了 IDispose 的类有用,最终仍是要调用 IDispose.Dispose 这个函数
IDispose.Dispose 也只是为了释放非托管资源,对托管内存无能为力。举个例子,FileStream, SqlDbConnection 都实现了 IDispose,但它们的 Dispose 函数其实就是 Close
综上所述,C# 无法手动释放对象
boringame 2009-10-24
  • 打赏
  • 举报
回复
如同楼上的using语句咯。。。

不过一般情况下不需要用到。

用C#这样的高级语言,最好别去管内存。
Star123light 2009-10-24
  • 打赏
  • 举报
回复
using(A a=new A())
{
Console.WriteLine("haha");
}

110,533

社区成员

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

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

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