2010-03-07 59 views
1

假设我正在C++/CLI中实现一些包装类Foo。当然,如果我创建一个dtor(Foo::~Foo),它将成为IDisposable的实现。但是,如果我的IDisposable只是简单地释放内存(例如它只是执行freedelete),那么不应该完成这个操作在常规终结者(Foo::!Foo)中,只要发生这种情况?我应该实施IDisposable以释放“非托管”内存吗?

我的意思是,我们确实不介意,只要它喜欢,为什么给过东西是基本上只是释放内存精细的控制是.NET释放内存的想法?

回答

1

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

而且你可能不觉得与一个单一的客户端桌面应用太大的区别,但是想象一下,有数百或数千个客户端服务器应用程序。

+0

但是,你不要指望在与managed.NET对象释放相同的控制,那么为什么与非托管对象? 对于.NET程序,管理的对象可能是它的大部分分配的,你不要那些“只要你不需要他们的”自由。 – Ilya 2010-03-07 13:23:55

相关问题