問題:如果我使用大的PDF文件(50Mb,1500頁)異步調用LoadFile()多次(10-20次就足夠了),那麼我會很快得到OutOfMemory異常。如果我在EndInvoke()之後調用GC.Collect(),那麼它可以解決問題。多次異步調用方法會導致OutOfMemory異常
同步調用效果很好(不會發生內存泄漏)。
關於如何解決它,而不直接調用GC.Collect()的任何想法?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Open_Click(object sender, EventArgs e)
{
MethodInvoker invoker = this.LoadFile;
AsyncCallback callback = CallBack;
invoker.BeginInvoke(callback, null);
// Synchronous call.
// LoadFile();
}
private void CallBack(IAsyncResult ar)
{
AsyncResult result = (AsyncResult)ar;
MethodInvoker invoker = (MethodInvoker)result.AsyncDelegate;
invoker.EndInvoke(ar);
// GC.Collect();
}
private void LoadFile()
{
byte[] fileBytes = File.ReadAllBytes(@"c:\50mb.pdf");
// Third party OCX component for viewing PDF files.
this.pdfOcxViewer.OpenBuffer(fileBytes, fileBytes.Length, "");
this.pdfOcxViewer.CloseFile();
}
}
爲什麼你認爲組件的多個實例正在運行?包裝組件的控件顯然已經有了一個實例。 – Corvin 2010-11-29 12:42:56