我见过的大多数包含非托管资源的实现都在方法的范围内结束。我正在寻找无限期持有此类资源并在程序停止运行时将其处置的方法。很可能需要以这种方式使用的资源的一个示例是CancellationTokenSource.Dispose()。
一个例子是使用Destructor:将资源作为依赖项传入,并在容器的最后一次使用时处理它们。例如,这在 Windows Presentation Foundation 程序中是可行的(默认情况下,结构已经像这样布置),但是为每个新的非托管资源重写依赖关系结构是很累人的。随着程序的扩展,依赖项所经过的距离也是如此。
一个解决方案可能是,使每个需要它的类都是一次性的,但是自由使用析构函数不会有性能成本吗?
我的问题是:编写本规范的创造性/不寻常的方式。如果您已经了解了所介绍方法的优缺点,请务必权衡一下!
这是一个示例 WPF 程序的 App.xaml.cs
public partial class App : Application
{
UnmanagedDependency unmanagedDependency = new UnmanagedDependency();
public App()
{
MainWindow = new MainWindow (unmanagedDependency); //rewrite the constructor of MainWindow
MainWindow.Show();
}
~App() //destructor method; called when the object is no longer referenced
{
unmanagedDependency.Dispose();
}
}
后记:澄清一下,我的示例类型UnmanagedDependency
不是包装类。