将非托管资源传递给其他类

时间:2016-06-03 15:42:14

标签: c# unmanagedresources

使用非托管资源时,将它们传递给其他对象的最佳做法是什么?我理解应该是创建非托管资源来处理它的类的责任,但是如果我将它传递给构造函数,资源会持久存在,然后构造函数将它放在私有字段中以供整个对象使用。寿命。

例如,请考虑以下情形:

public class Source
{
     public static void Main(string[] args)
     {
          using (MyUnmanagedResource r = new MyUnmanagedResource())
          {
               Helper helper = new Helper(r);
               helper.M1();

               Helper helper2 = new Helper();
               helper2.M2(r);
          }
     }
}
public class Helper
{
     private MyUnmanagedResource resource;

     public Helper(){}
     public Helper(MyUnmanagedResource r)
     {
       resource = r;
     }

     public void M1()
     {
        Changer c = new Changer(resource);
        c.M1();

     }
     public void M2(MyUnmanagedResource re)
     {
        Changer c = new Changer();
        c.M2(re);
     }
}
public class Changer
{
     private MyUnmanagedResource resource;

     public Changer(){}
     public Changer(MyUnmanagedResource r)
     {
       resource = r;
     }

     public void M1()
     {
        resource.DoThing();
     }
     public void M2(MyUnmanagedResource re)
     {
        re.DoThing2();
     }
}

在这种情况下,这是最佳做法?将它传递给私有变量以供以后使用肯定更容易编写,但这是否会导致处理资源的问题?在这个例子中只有一个方法,后者似乎更好,但是当你有10-15个方法使用资源,而其他类也被调用需要资源时,它会变得非常混乱。

我过去曾遇到内存泄漏问题,而且我不确定它是否处理非托管资源的方式。我将非托管资源更改为通过参数传递,但它导致它成为大约50个方法中的参数,这看起来很痛苦。

0 个答案:

没有答案