后来查了一下MSDN,得知通过实现IDisposable接口,可解决部分问题,代码如下:
[C#]
public class Base : IDisposable {
public void Dispose() {
this.Dispose(true);
GC.SupressFinalize(this);
}
protected virtual void Dispose(bool disposing) {
if (disposing) {
// 托管类
}
// 非托管资源释放
}
~Base() {
this.Dispose(false);
}
}
public class Derive : Base {
protected override void Dispose(bool disposing) {
if (disposing) {
// 托管类
}
// 非托管资源释放
base.Dispose(disposing);
}
}
1、对于上述代码,已注释的“托管类”与“非托管资源释放”实际代码中应如何实现?希望能有一简单例子。
2、有文章说:如果对非托管资源提供了包装WrapSource。那么这个WrapSource是托管资源了,那么如何对非托管资源进行WrapSourcek呢?
3、另据说采用CLR机制也能解决内存释放问题?
望各位高手指点一二。。。。
7 个解决方案
#1
感兴趣,来学习下
#3
System.Runtime.InteropServices.Marshal.ReleaseComObject
#4
如果你的代码中没有 P/Invoke 之类的话,那基本上用不上清理非托管资源(COM Interop 没做过,不太清楚),因为你并没直接使用非托管资源,而 .NET 类库使用的非托管资源她自己已经处理好了。
2楼的例子应该有所帮助,GC.SuppressFinalize()是很见效果的。
2楼的例子应该有所帮助,GC.SuppressFinalize()是很见效果的。
#5
链接失效 看不到了
我也想知道--
对于上述代码,已注释的“托管类”与“非托管资源释放”实际代码中应如何实现?希望能有一简单例子。
我也想知道--
对于上述代码,已注释的“托管类”与“非托管资源释放”实际代码中应如何实现?希望能有一简单例子。
#6
http://www.enet.com.cn/eschool/video/c/14.shtml这个参考一下吧
#7
没有解决问题,不过还是谢谢了。
我觉得“非托管资源释放”大概是指调用非托管dll中的释放方法,
“托管类”不知道是不是指的是 “GC.Collect();” 或者是别的,如果不写,会不会造成托管资源无法释放?
#1
感兴趣,来学习下
#2
#3
System.Runtime.InteropServices.Marshal.ReleaseComObject
#4
如果你的代码中没有 P/Invoke 之类的话,那基本上用不上清理非托管资源(COM Interop 没做过,不太清楚),因为你并没直接使用非托管资源,而 .NET 类库使用的非托管资源她自己已经处理好了。
2楼的例子应该有所帮助,GC.SuppressFinalize()是很见效果的。
2楼的例子应该有所帮助,GC.SuppressFinalize()是很见效果的。
#5
链接失效 看不到了
我也想知道--
对于上述代码,已注释的“托管类”与“非托管资源释放”实际代码中应如何实现?希望能有一简单例子。
我也想知道--
对于上述代码,已注释的“托管类”与“非托管资源释放”实际代码中应如何实现?希望能有一简单例子。
#6
http://www.enet.com.cn/eschool/video/c/14.shtml这个参考一下吧
#7
没有解决问题,不过还是谢谢了。
我觉得“非托管资源释放”大概是指调用非托管dll中的释放方法,
“托管类”不知道是不是指的是 “GC.Collect();” 或者是别的,如果不写,会不会造成托管资源无法释放?