在我們的應用程序中,我們正在使用System.IO.Packaging.Package類讀取XPS文件。當我們從PackagePart流中讀取數據時,我們可以從任務管理器中看到應用程序的內存消耗增加。但是,讀取完成後,內存消耗不會回落到從流中讀取數據之前的水平。從PackagePart流讀取不釋放內存
爲了說明這個問題,我寫了一個簡單的代碼示例,您可以在獨立的wpf應用程序中使用它。
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
_package = Package.Open(@"c:\test\1000pages.xps", FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
private void ReadPackage()
{
foreach (PackagePart part in _package.GetParts())
{
using (Stream partStream = part.GetStream())
{
byte[] arr = new byte[partStream.Length];
partStream.Read(arr, 0, (int)partStream.Length);
partStream.Close();
}
}
}
Package _package;
private void Button_Click(object sender, RoutedEventArgs e)
{
ReadPackage();
}
}
ReadPackage()方法將讀取所有PackagePart對象的流內容到本地數組中。在示例中,我使用了1000頁的XPS文檔作爲包源,以便輕鬆查看應用程序的內存消耗變化。在我的機器上,獨立應用程序的內存消耗從18MB開始,然後在調用該方法後升至100MB。再次調用該方法可以再次提高內存消耗,但可以回退到100MB。但是,它不會回落到18MB。
有沒有人在使用PackagePart時遇到過這個問題?還是我用它錯了?我認爲PackagePart的內部實現緩存了讀取的數據。
謝謝!
我不知道爲什麼這個問題是downvoted。 – 2010-09-29 07:38:11