我见过的大多数实现包含非托管资源都在方法的范围内结束。我正在寻找无限期保留这种资源的方法,并在程序停止运行时将其处理掉。可能需要以这种方式使用的资源示例是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
不是包装类。