假设我在C ++ / CLI中实现了一些包装类Foo
。当然,如果我要创建一个dtor(Foo::~Foo
),它将成为IDisposable
实现。
IDisposable通常用于允许立即释放一些“稀缺”资源:GDI资源,文件句柄等。但是,如果我的IDisposable只是释放内存(例如它只执行free
或delete
) ,如果发生这种情况,不应该在常规终结器(Foo::!Foo
)中完成吗?
我的意思是,我们认为.NET可以随时释放内存,所以为什么要对基本上只是释放内存的内容进行精细控制呢?
答案 0 :(得分:1)
就我个人而言,我认为尽早释放记忆(即一旦你不需要它)是一个很好的原则。 当然,GC最终将开始并释放它。但是GC使用单个线程来调用所有终结器,如果有很多终结器要调用,这会对性能产生不良影响。
对于具有单个客户端的桌面应用程序,您可能没什么区别,但想象一下拥有数百或数千个客户端的服务器应用程序。