- - PR -
クリスタルレポート データセットを渡す際の処理時間
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-02-12 10:51
クリスタルレポートで帳票を出力するプログラムを作成していますが、
データセットをレポートエンジンに渡す箇所で 時間がかかっています。 開発環境で作成した帳票出力プログラムを 実行環境で実行するとデータセットをレポートエンジンに渡す箇所で時間がかかります。 90秒ほど掛かっています。 開発環境では0.5秒ほどかかります。 ミニマムコードを作成して検証しましたが マシンの性能以外の原因が分かりません。 なぜ時間がかかってしまうのかみなさんの意見をお聞かせください。 開発環境 Visual Studio 2008 Crystal Reports Basic for Visual Studio 2008 OS:XP pro sp2 CPU:Core2Duo 2GHz Memory:3GB 実行環境 OS:Vista CPU:Celelon 1.8GHz Memory:1GB 実行環境へはVisualStudio2008で作成したセットアップを使用しています。 セットアップには必須コンポーネントとして .NET Framework3.5 Crystal Report Basic for Visual Stuidio 2008 Microsoft Visual Studio 2008 Report Viewer を含めています。 以下が検証用に作成したミニマムコードです。
以下が実行環境(Vista)で実行した結果です。 ############################################################################# データセット作成:11 ############################################################################# ############################################################################# レポートオブジェクト作成:466 ############################################################################# ############################################################################# レポートオブジェクトにデータセット設定:91354 ############################################################################# ############################################################################# プレビューにレポートオブジェクト設定:399 ############################################################################# | ||||||||||||
|
投稿日時: 2009-02-12 11:27
追記です。
一度レポート呼び出しを終えると 次回からは時間はかかりません。 レポートオブジェクトにデータセット設定は0.1秒ほどです。 | ||||||||||||
|
投稿日時: 2009-02-12 13:59
http://social.msdn.microsoft.com/forums/ja-JP/vbgeneralja/thread/296708fe-b2ff-4a79-9daf-39226eb47aa6/
おそらく上記と同じ問題のようです。 それにしても90秒は掛かりすぎですが。。。 | ||||||||||||
|
投稿日時: 2009-02-13 16:36
キャッシュの線は私も少し思いました。
手元にCrystalReportsがないので切り分けできませんが、 ありそうな話としては 1.レンダリングエンジンなどレポート機能の初回読み込みに時間がかかる 2.レンダリングそのものに時間がかかるが2回目以降はキャッシュされているので速い 3.初回のグラフィック領域確保に時間がかかる あたりなのでしょうか。 複数のレポート(レポートA,レポートB)を作成しておいて、 起動時にレポートAを無条件で作成 ( reportA.SetDataSource(dataset);まで) 起動後にレポートBを作成 で、キャッシュか否かはある程度確認できるかもしれません。 いずれにせよ、「どこで遅くするか」という話になっちゃいそうですけど。 | ||||||||||||
|
投稿日時: 2009-02-13 17:49
(何の根拠もありませんが)
型付DataSetを使っていますか?コード上では使っているような、いないような。。。 正しく型付で処理すればおそらく少しは早くなると思います。 (型が無いのでColumnsを見るorリフレクション?使用していて遅いのでは) [ メッセージ編集済み 編集者: indigo-x 編集日時 2009-02-13 18:03 ] | ||||||||||||
|
投稿日時: 2009-02-14 02:55
うーん、構成事態が複雑なレポートでないとここまで酷いのには出くわさないです (たとえば、サブ レポートが存在するとか、データのリレーションが複雑だとか)。 レポートの構成と、念のため DataSet の件数を教えて頂けないでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2009-02-17 12:01
ありがとうございます。
私も上記1,2だと思いまして バックグラウンドで初回読み込むを行うことにいたしました。 対応策になっていませんが。。。
確認してみたところ型付DataSetを使用していました。 サンプルコードで使用している"DataSet1",DataSet1.DataTable1"ですが、 VisualStudioから自動生成したもので、DataTable1の各カラムはデフォルトで、System.Stringでした。
レポートはVisualStudioから作成した「空のレポート」です。 サブレポートも設定していません。 DataSetの件数ですが、 1つのDatatableを設定しており、 Datatableには1行設定しています。 Datatableのカラムは row["no1"] = "hogeNo1"; row["no2"] = "hogeNo2"; row["no3"] = "hogeNo3"; の3カラムです。 |
1