2013-01-22 73 views
0

我正在封装一些手动资源处理的本地代码。我希望我的C#包装器在不将责任传递给客户端的情况下处理此问题。这是可能的,还是我不可避免地必须实施IDisposable并将责任传递给客户端代码?C#类是否可以自动管理非托管资源

ie甚至可以编写自动处理管理资源的类吗?

如果我说确定性处理这些资源不是问题,而且我只关心它们被安全释放,我很高兴让GC通过终结者安排他们的发布。

+1

这完全取决于有问题的非托管代码。 –

+0

非托管资源是在dll中使用的不透明结构的句柄。 dll api提供了创建,增加参考计数和释放这些句柄的功能(减少参考计数)。任何对create/addref函数的调用都需要与相应的版本匹配。 –

+0

好吗?您问是否可以编写类来自动处理托管资源。答案当然是使用.NET内部的垃圾回收器 –

回答

1

这明确地说明了终结器的设计目的。写一个释放非托管资源,CLR会在对象被垃圾收集后自动调用它。你当然可以实现IDisposable来尽早发布它,但这不是必需的。如果资源分配没有影响,可以跳过。你描述的那种类型与COM对象的匹配。谁的.NET包装也不实现IDisposable。

密切关注程序的基本资源使用情况,以确保这不是问题。如果您对实际使用的资源不够了,可能很难判断。

相关问题