我有一个控制台应用程序需要创建多个<T>
类型的对象,而T
位于另一个我不拥有的dll中。
当创建类型为T
的对象时,它会在内存中加载XML,但它永远不会释放它。
因此,如果您创建了太多类型为T
的对象,则会抛出OutOfMemoryException。
dll不为该Object提供dispose方法,我无法直接与XML交互。
有没有办法处理由我不拥有的dll创建的某种类型的对象?
我正在使用.NET 4.6
第三方dll是 Trados Studio 的dll,适用于了解该计划的人。
答案 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);
}