在会话的生命周期中持有非托管资源的方法

时间:2017-04-22 09:56:33

标签: c# unmanagedresources

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

0 个答案:

没有答案