pdfレンダリングに係る処理時間の短縮方法

123 views
Skip to first unread message

Takayuki Akiba

unread,
Nov 6, 2020, 3:26:29 AM11/6/20
to RapidReportサポート QAフォーラム
いつもお世話になっております。
RapidReport製品版を使っております(ASP.Net 言語:VB)

約600ページ程度のPDFをレンダリングすると1分程度で処理が完了するのですが、同じレポートに固定レイアウトのページ追加(  pages.Add(pages_Uremen(0)) )を行い、ページ数が2倍になった際に、処理時間が7分程度にも及びます。

処理を高速化するために見直すべき要素などはありますでしょうか??

処理に時間を要しているのは以下の箇所で、PDFファイルをレンダリングするところだと思われます。
 Using out As FileStream = File.Create(FilePath)
                Dim renderer As New PdfRenderer(out, FontSetting)
                pages.Render(renderer)
 End Using

RapidReport

unread,
Nov 8, 2020, 10:05:40 PM11/8/20
to RapidReportサポート QAフォーラム
吉川です。

1000ページ、20000データの簡単な帳票で試してみましたが、2秒程度で出力できましたので、
こちらでは再現できていないのが現状です。
もし、こちらで再現できる環境が用意できるのであれば頂きたいです。
RapidReport帳票定義、プログラム、テストデータ等

あわせて、確認して頂きたいことがあります。
・ページ追加する固定レイアウトのみで出力した場合、6分程度かかるかどうか
 このとき、pages.Render(renderer)で遅くなるか
・ページ追加する処理の部分で遅くなっていませんか?
 pages.Add(pages_Uremen(0))
 のコードを見る限り、1ページずつ600回のループ処理で、ページ追加しているように見えます。
 たとえば、追加ページを一度に追加する
 pages.AddRenge(report.GetPages)
 で置き換え可能か検討してみてください。

・そもそも、最初の600ページ程度で1分かかることも気になります。
 出力先が遅いデバイスやネットワークを利用して保存しようとしていないか、確認してみてください。
 古いHDD
 HUBが10base
 マシンのスペックが低い(メモリが1Gとか)

2020年11月6日金曜日 17:26:29 UTC+9 t.akib...@gmail.com:
Message has been deleted
Message has been deleted
Message has been deleted
Message has been deleted
Message has been deleted

t.akib...@gmail.com

unread,
Nov 8, 2020, 11:39:27 PM11/8/20
to RapidReportサポート QAフォーラム
  ご回答いただきありがとうございます。

600回ループしていたのは、レポート1とレポート2を交互に印刷するためでした。
試しに、カスタマイザの「PageAdded」に処理を変更してみましたが、吉川様よりいただいたご回答程のレスポンスは得られませんでした。
また、固定テキストのみの裏面について、表面と同じデータソースを渡していましたが、これを「DummyDataSource.GetInstance()」へと変更し、裏面のみで印刷を行ったところ5秒程度でプレビューが表示されることを確認しました。

表面:サンプルデータの様なデータソースを渡す
裏面:DummyDataSource.GetInstance()でダミーを渡す
裏面追加方法:カスタマイザによる追加

上記の条件で試験しましたが、プレビューにやはり1~2分程度を要します。
デバッグモードで実行しましたが、やはり添付したサンプルプログラムの85行目(pages.Render(renderer))の箇所で遅くなっているようです。

当方の試験環境についてですが、仮想マシンにて動作試験を行っております。

CPU:Xeon E5-2690 2.6GHz(ホストCPU)
割当コア数:4コア
割当メモリ:16GB

HDDの型番までは調査に至っておりません、同一仮想OS内でのIOなのでネットワークがボトルネックとも考えにくい状況となっております。


t.akib...@gmail.com

unread,
Nov 8, 2020, 11:40:31 PM11/8/20
to RapidReportサポート QAフォーラム
2020年11月9日月曜日 13:39:27 UTC+9 t.akib...@gmail.com:
sample.zip

RapidReport

unread,
Nov 9, 2020, 3:38:58 AM11/9/20
to RapidReportサポート QAフォーラム
吉川です。

情報の提示ありがとうございました。

まず、処理時間が7分程度だったものが、
1分程度に改善された、ということでよろしいでしょうか。
その上で、1分であっても長いと思うので、
調査を続ける、という認識でよろしいでしょうか。

上記の通りと解釈した上で、結論から申しますと、
現状、1分かかって出力されるという現象が再現できておらず、
問題も判明していません。

レンダリングするときに遅くなることから、
描画に関係する箇所をいくつか調査して頂きたいです。

・次のURLからファイルをダウンロードし、問題のある個所の実行時間を教えて下さい。

・フォントに「fujimincho」が指定されています。
 これを「gothic」に変更した上で、実行してみてください。

・データ件数によって、遅いかどうかを教えて下さい。
 ある時点から突然遅くなるのか、件数に応じて遅くなっていくのか

・画像ファイル
 画像要素が1つデザインされています。
 画像は固定なのか動的なのか

よろしくお願い致します。

t.akib...@gmail.com

unread,
Nov 9, 2020, 7:29:04 PM11/9/20
to RapidReportサポート QAフォーラム
吉川様
 
 いつもお世話になります。

 原因が判明いたしました。
 デバッグ中に出力ウィンドウを確認したところ、「jp.co.systembase.report.data.UnknownFieldException」が大量に出力されていました。

 当方で作成したシステムにて、Rapidreportに転送するデータ項目を利用者がオンライン画面から設定する箇所があり(サンプル:TSRA0220RS.rrptのN1~N6)、入力された項目分のみをデータソースの列として追加しておりました。

 これにより、データソースに追加されなかった列に対して、RapidReport側で UnknownFieldException が大量に発生していたため、処理が遅延していたようです。
 上記の箇所を修正し、データ未入力の場合でもデータソースに空の列(フィールド)を登録することで、処理時間が3秒未満まで短縮されました。

 ご迷惑をおかけし、申し訳ありませんでした。
  

2020年11月9日月曜日 17:38:58 UTC+9 RapidReport:
Reply all
Reply to author
Forward
0 new messages