我应该实现IDisposable以释放“非托管”内存吗?

时间:2010-03-07 13:10:06

标签: c++-cli

假设我在C ++ / CLI中实现了一些包装类Foo。当然,如果我要创建一个dtor(Foo::~Foo),它将成为IDisposable实现。

IDisposable通常用于允许立即释放一些“稀缺”资源:GDI资源,文件句柄等。但是,如果我的IDisposable只是释放内存(例如它只执行freedelete) ,如果发生这种情况,不应该在常规终结器(Foo::!Foo)中完成吗?

我的意思是,我们认为.NET可以随时释放内存,所以为什么要对基本上只是释放内存的内容进行精细控制呢?

1 个答案:

答案 0 :(得分:1)

就我个人而言,我认为尽早释放记忆(即一旦你不需要它)是一个很好的原则。 当然,GC最终将开始并释放它。但是GC使用单个线程来调用所有终结器,如果有很多终结器要调用,这会对性能产生不良影响。

对于具有单个客户端的桌面应用程序,您可能没什么区别,但想象一下拥有数百或数千个客户端的服务器应用程序。