2013-07-09 49 views
2

我有一個應用程序提供打印功能和預覽該打印的能力。打印預覽使用PrintPreviewDialog進行處理。該應用程序是一個C#WinForms .Net 4.0應用程序。進行打印預覽時是否有限制?

實質上,該功能是打印(預覽)多頁報告,並且在此特定實例中,它預覽了大量圖像文件(每頁大約2個圖像950個)。

在這種情況下,應用程序在462頁拋出一個錯誤(所以不算太離譜總),而當時以下任務管理器值可用:

  • 存儲器(PWS): 〜1.6GB
  • 手:〜480個
  • 用戶對象:〜300
  • GDI對象:〜1400

我相信,內存(ALTH ough高)不是問題,因爲我會期望一個內存不足的例外。 GDI對象漸晚了一點,但我不認爲這是過高

所顯示的實際異常消息是不斷有幫助的(我相信默認限制是10000?):

在GDI發生

一般性錯誤+

一些其他的事情要警惕:

  • 這是在客戶的網站上運行的應用程序,所以沒有運行廣告的能力ebugger
  • 圖像首先加載到內存中Image對象的集合(這也解釋了高GDI對象計數),這不能在這個階段
  • 我還沒有證實被改變,如果這樣做的時候,這也是一個問題一個真正的打印,顯然沒有人願意浪費所有的文件,但我正在等待打印的結果,以PDF測試

最後,我的問題是:是否有任何限制我應該知道可能的導致這種行爲?例如可能在註冊表中設置的Windows限制。與打印內存有關的東西?或不同的GDI限制打印?

是否有任何進一步的測試可以幫助診斷原因?

回答

0

我不知道它是否有幫助,但它可能不是系統limist的情況,但文件鎖定。

您提到您正在使用Image將文件加載到內存中。 MSDN says here

文件保持鎖定狀態,直到圖像被丟棄。

然後,如果您的程序試圖觸摸它,GDI +會變得瘋狂。

保存圖像時到光盤,在這裏你得到有時會出現錯誤: Image.Save(..) throws a GDI+ exception because the memory stream is closed

也許嘗試加載圖像到的MemoryStream與FileShare.ReadWrite選項?

+0

其實,我不願意認爲這是原因,因爲在將文件加載到MemoryStream中之後。然後我將它繪製成一個新的Image,然後關閉MemoryStream - 這應該消除與文件的任何連接。這可能是一個初始讀取被鎖定,很難說,因爲我現在說我不能更改代碼來測試它。 – musefan