3

ユーザーが多くのグラフを生成し、PDF経由でエクスポートできるようにするasp.net3.5アプリケーションがあります。これは小さいPDF(100ページ未満)では問題なく機能しますが、大きいPDFを実行すると、ランダムエラーが発生します。私たちが見たエラーのいくつかは次のとおりです。

--System.OutOfMemoryException
--HTML文字列をレンダリングできませんでした。HTML文字列から画像を取得できませんでした。LoadHtmlConcurrencyLevel=1を設定してみてください
。--クローンエラー。メモリ不足
..--変換が完了するのを待っているタイムアウト。
--System.OutOfMemoryException:メモリが不足しています。System.Drawing.Image.FromStream(Stream stream、Boolean useEmbeddedColorManagement、Boolean validateImageData)at System.Drawing.Image.FromStream(Stream stream)

大きなレポートを複数回実行すると、通常、さまざまな例外が発生します。IISがクラッシュすることがあり、アプリケーションをバックアップするためにiisresetを実行する必要があります。

これが私たちが実行するコードです。チャート(png画像)を使用してPDFドキュメントを作成し、それをバイト配列にエクスポートしてメモリストリームに配置します。一部の画像などを回転させる関数にメモリストリームを渡し、doc.saveメソッドを呼び出してエクスポートします。

Dim mainPageBytes() As Byte = PDF.GetBytes
Dim stream As New System.IO.MemoryStream(mainPageBytes)
Dim existingDoc As New PDFCreator.Document(stream)
Dim doc As PDFCreator.Document = GetDocument(mainPageBytes,    GetChartingPageNumbers(PDF.ConversionSummary), pageOrientation, user, existingDoc)
doc.Save(response, True, Me.DocumentName)
4

2 に答える 2

3

IISには、メモリとランタイムの両方で実行されるスクリプトに制限があります。おそらく、スクリプトが実行時間やメモリの制限を超えています。これらはIIS構成設定で設定できますが、一般的には理由があります(1つのスクリプトがサーバー上のすべてのメモリを使い果たすのを防ぐため、またはスクリプトが無限ループで永久に実行されるのを防ぐためです。 IISを再起動する以外に終了する方法はありません。)

デバッグをオンにして(これらの制限を無効にします)queryObj("PeakWorkingSetSize")、ログファイルに出力して、スクリプトがクラッシュしたときに実際に使用しているメモリの量を確認します。

于 2010-01-14T04:30:53.307 に答える
0

製品ドキュメントで推奨されているように、コンバーターを64ビットプロセスで実行しますか?導入要件は、オンラインドキュメントで確認できます。32ビットモードでは、.NETで使用可能なメモリはかなり制限されています。IISでは、32ビットアプリケーションフラグがfalseであることを確認する必要があります。

また、多数の大きな画像を含むHTMLページを変換する際のメモリ使用量を減らすために、ImagesScalingEnabledプロパティをfalseに設定できます。この機能の完全なサンプルコードは、セット画像のスケーリングとJPEG圧縮レベルのデモにあります。

于 2014-08-08T06:48:24.880 に答える