代码之家  ›  专栏  ›  技术社区  ›  Ilya

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

  •  1
  • Ilya  · 技术社区  · 15 年前

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

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

    我的意思是,我们可以接受这样的想法,.net可以在任何时候释放内存,那么为什么要对本质上只是释放内存的东西进行细粒度的控制呢?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Timores    15 年前

    就我个人而言,我认为尽早释放记忆是一个好的原则。 当然,GC最终会介入并释放它。但是gc使用一个线程来调用所有终结器,如果要调用的终结器太多,则可能会对性能造成不良影响。

    在桌面应用程序中,你可能感觉不到与单一客户端有多大区别,但想象一下服务器应用程序中有成百上千个客户端。

    推荐文章