簡體   English   中英

如何配置第三方dll中的資源?

[英]How to dispose resources in third-party dll?

我有一個控制台應用程序需要創建多個<T>類型的對象,而T位於另一個我不擁有的 dll 中。

當一個T類型的對象被創建時,它會在內存中加載一個 XML,但它永遠不會釋放它。 因此,如果您創建了太多T類型的對象,則會拋出 OutOfMemoryException。 dll 不為該對象提供處理方法,我無法直接與 XML 交互。

有沒有辦法處理由我不擁有的 dll 創建的某種類型的對象?

我正在使用 .NET 4.6

第三方dll是Trados Studio的dll,適合了解程序的人使用。

只需將第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);
}

在運行時調用 GC.Collect() 可能會解決問題。 參考: https : //docs.microsoft.com/en-us/dotnet/api/system.gc.collect? view = net- 5.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM