10 个解决方案
#1
yourclass=null;
#2
.NET的自动垃圾回收功能可以自行解决,不过C#中的类也支持析构函数,并在其中调用一些善后处理,只是在自动垃圾回收时才会调用,并且你不知道它在什么时候回收。
#3
.NET的自动垃圾回收功能可以自行解决,不过C#中的类也支持析构函数,并在其中调用一些善后处理,只是在自动垃圾回收时才会调用,并且你不知道它在什么时候回收。
#4
请注意,自己写的类,表面上没有从任何类继承,其实仍然从object中派生的。
可以写自己的类析构,或者
cls_YourClass=null;
不过,在类过了自己的使用域时候会被.NET自动清理回收。
可以写自己的类析构,或者
cls_YourClass=null;
不过,在类过了自己的使用域时候会被.NET自动清理回收。
#5
VC#不需要单独写了,它会自动收回的。VC++的程序员注意一下。
#6
不用delete,自动回收
如果想自己释放就重载类的dispose()方法
如果想自己释放就重载类的dispose()方法
#7
对上面的兄弟们说的对呀!
这就是C#的一大好处呀!
这就是C#的一大好处呀!
#8
一般情况下不用考虑对象的释放问题。但是C#的GC并不是在对象超出使用区域,或不再被使用时立即将对象占用的内存释放。
而且,如果在对象中使用的外部资源,如在构造函数中打开了文件,或建立了数据库连接,这种类必须实现IDispose接口,并且实现Dispose方法是释放占用的资源。这种类在对象在不再被使用的时候需要调用他的Dispose方法,或者如下使用:
using ( MyClass aClass ) //MyClass中使用了资源
{
......//使用aClass
}
出了using域后,using参数中列出的所有对象将被调用Dispose方法
而且,如果在对象中使用的外部资源,如在构造函数中打开了文件,或建立了数据库连接,这种类必须实现IDispose接口,并且实现Dispose方法是释放占用的资源。这种类在对象在不再被使用的时候需要调用他的Dispose方法,或者如下使用:
using ( MyClass aClass ) //MyClass中使用了资源
{
......//使用aClass
}
出了using域后,using参数中列出的所有对象将被调用Dispose方法
#9
更正一下
using ( MyClass aClass = new MyClass() ) //MyClass中使用了资源
{
......//使用aClass
}
using ( MyClass aClass = new MyClass() ) //MyClass中使用了资源
{
......//使用aClass
}
#10
1. 如果你的类对象引用了需要显示释放的系统资源(比如文件句炳),那么你首先要做的事情是实现类的Finalizer函数,GC在回收你的类对象占用的内存之前会调用这个函数。在C#里,其语法与C++的析够函数相同,~YourClassName()。
2. Finalizer/GC的缺点是调用时间不确定,GC只有在特定的条件下才进行,而在Finalizer调用之前,系统资源仍然会处于被占用的状态。
3. 你可以为类的用户提供可以显示释放资源的方法,IDispose接口,但那只是Finalizer的补充,如果用户没有调用Dispose,Finalizer一样有责任完成清理工作。
4. C#特别提供了using statement支持IDispose接口。
5. 如果没有重要的系统资源或者其他充分的理由,不要实现Finalizer和IDispose,因为Finalizer会影响系统的性能。
2. Finalizer/GC的缺点是调用时间不确定,GC只有在特定的条件下才进行,而在Finalizer调用之前,系统资源仍然会处于被占用的状态。
3. 你可以为类的用户提供可以显示释放资源的方法,IDispose接口,但那只是Finalizer的补充,如果用户没有调用Dispose,Finalizer一样有责任完成清理工作。
4. C#特别提供了using statement支持IDispose接口。
5. 如果没有重要的系统资源或者其他充分的理由,不要实现Finalizer和IDispose,因为Finalizer会影响系统的性能。
#1
yourclass=null;
#2
.NET的自动垃圾回收功能可以自行解决,不过C#中的类也支持析构函数,并在其中调用一些善后处理,只是在自动垃圾回收时才会调用,并且你不知道它在什么时候回收。
#3
.NET的自动垃圾回收功能可以自行解决,不过C#中的类也支持析构函数,并在其中调用一些善后处理,只是在自动垃圾回收时才会调用,并且你不知道它在什么时候回收。
#4
请注意,自己写的类,表面上没有从任何类继承,其实仍然从object中派生的。
可以写自己的类析构,或者
cls_YourClass=null;
不过,在类过了自己的使用域时候会被.NET自动清理回收。
可以写自己的类析构,或者
cls_YourClass=null;
不过,在类过了自己的使用域时候会被.NET自动清理回收。
#5
VC#不需要单独写了,它会自动收回的。VC++的程序员注意一下。
#6
不用delete,自动回收
如果想自己释放就重载类的dispose()方法
如果想自己释放就重载类的dispose()方法
#7
对上面的兄弟们说的对呀!
这就是C#的一大好处呀!
这就是C#的一大好处呀!
#8
一般情况下不用考虑对象的释放问题。但是C#的GC并不是在对象超出使用区域,或不再被使用时立即将对象占用的内存释放。
而且,如果在对象中使用的外部资源,如在构造函数中打开了文件,或建立了数据库连接,这种类必须实现IDispose接口,并且实现Dispose方法是释放占用的资源。这种类在对象在不再被使用的时候需要调用他的Dispose方法,或者如下使用:
using ( MyClass aClass ) //MyClass中使用了资源
{
......//使用aClass
}
出了using域后,using参数中列出的所有对象将被调用Dispose方法
而且,如果在对象中使用的外部资源,如在构造函数中打开了文件,或建立了数据库连接,这种类必须实现IDispose接口,并且实现Dispose方法是释放占用的资源。这种类在对象在不再被使用的时候需要调用他的Dispose方法,或者如下使用:
using ( MyClass aClass ) //MyClass中使用了资源
{
......//使用aClass
}
出了using域后,using参数中列出的所有对象将被调用Dispose方法
#9
更正一下
using ( MyClass aClass = new MyClass() ) //MyClass中使用了资源
{
......//使用aClass
}
using ( MyClass aClass = new MyClass() ) //MyClass中使用了资源
{
......//使用aClass
}
#10
1. 如果你的类对象引用了需要显示释放的系统资源(比如文件句炳),那么你首先要做的事情是实现类的Finalizer函数,GC在回收你的类对象占用的内存之前会调用这个函数。在C#里,其语法与C++的析够函数相同,~YourClassName()。
2. Finalizer/GC的缺点是调用时间不确定,GC只有在特定的条件下才进行,而在Finalizer调用之前,系统资源仍然会处于被占用的状态。
3. 你可以为类的用户提供可以显示释放资源的方法,IDispose接口,但那只是Finalizer的补充,如果用户没有调用Dispose,Finalizer一样有责任完成清理工作。
4. C#特别提供了using statement支持IDispose接口。
5. 如果没有重要的系统资源或者其他充分的理由,不要实现Finalizer和IDispose,因为Finalizer会影响系统的性能。
2. Finalizer/GC的缺点是调用时间不确定,GC只有在特定的条件下才进行,而在Finalizer调用之前,系统资源仍然会处于被占用的状态。
3. 你可以为类的用户提供可以显示释放资源的方法,IDispose接口,但那只是Finalizer的补充,如果用户没有调用Dispose,Finalizer一样有责任完成清理工作。
4. C#特别提供了using statement支持IDispose接口。
5. 如果没有重要的系统资源或者其他充分的理由,不要实现Finalizer和IDispose,因为Finalizer会影响系统的性能。