如何在第三方DLL中处理资源?

时间:2016-04-27 13:28:24

标签: c# .net

我有一个控制台应用程序需要创建多个<T>类型的对象,而T位于另一个我不拥有的dll中。

当创建类型为T的对象时,它会在内存中加载XML,但它永远不会释放它。 因此,如果您创建了太多类型为T的对象,则会抛出OutOfMemoryException。 dll不为该Object提供dispose方法,我无法直接与XML交互。

  

有没有办法处理由我不拥有的dll创建的某种类型的对象?

我正在使用.NET 4.6

第三方dll是 Trados Studio 的dll,适用于了解该计划的人。

1 个答案:

答案 0 :(得分:1)

只需将第3部分对象的实例设置为null并创建新实例即可。垃圾收集器最终将清理您设置为null的对象,并且不会再出现内存不足异常。

public class Class1
{
    private StringBuilder sb = new StringBuilder();

    public void loadFile()
    {
        using(StreamReader sr = new StreamReader("C:\\test.txt"))   // Loads large text file. 
        {
            sb.Append(sr.ReadToEnd());
        }
    }
}

static void Main()
{
    fileloader.Class1 inst = new fileloader.Class1(); // Assume this is the instance of your 3rd party object. 

    do
    {
        if(inst == null)
        {
            inst = new fileloader.Class1();
        }

        for (int i = 0; i < 100; i++)
        {
            inst.loadFile();
        }

        inst = null;  // allows the object to be GC'ed. Without this i get the OutOfMemoryException

        Thread.Sleep(1000);

    } while (true);
}