[英]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.