- PR -

activereportのメモリ不足について

1
投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2008-05-08 10:43
いつもお世話になります。

今回 vb.net 2005 + activereport.net 3.0J + postgres
にてDMを作成するプログラムを作成しています。

開発環境
win xp pen4 3.0G メモリ:525

まずDMなのですが、連続用紙の印刷で1枚に対して
4×6 の計24個DMを出力します。
内容は氏名、住所、備考、カスタマーバーコードです。

処理の流れとしてはCSVのデータをDBに取込み、その後
印刷ボタンを押すとそのプレビュー画面が表示されると
いういたってシンプルなつくりになっています。

内部的な作りとしては印刷ボタンをクリックすると
レポート_reportstart
の部分でデータセットにデータをselectしてきて
そのデータを me.datasource = ds.tables(0)
としてレポートを出力しています。

ここで質問なのですが、上記の処理を4000件(4000/24=167ページ)
ぐらいまでは問題なく出力出来るのですが、5000件(5000/24=208ページ)
印刷(プレビュー)しようとするとアボートしてしまいます。
(メモリが不足しています。:エラーメッセージ)
ちなみに rpt.run(false)の部分でアボートしています。

 ここでバーコードがメモリを消費している原因かと思いバーコードを
はずして実行したところ思ったとおり問題なく5000件でも表示されて
います。

なんとか200ページを越えるプレビュー画面をだしたいのですが、
何かよい方法はないでしょうか?
物理的にメモリを増やすしかないのでしょうか?

こちらも引き続き調べて見ますのでなにかわかる方がおられまし
たらコメント宜しくお願いします。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-05-08 11:01
GrapeCity製品FAQより:
作成できるレポートのページ数の上限は?
レポート作成時のメモリ使用量を軽減させる方法について
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2008-05-08 11:51
私も Ver2 のときにメモリ不足について悩みました。
一時ファイルを分離ストレージに格納することでメモリ使用量を抑えることができるとのことでしたが、何らかの理由で不正終了した場合に一時ファイルがそのまま残ってしまい、それだけを削除する手段がないとのことで見送りました。
そのときは、最大ページ数を抑えることで調整しました。

Ver3 ではCacheToDiskLocation プロパティが追加されたようです。
このプロパティを使えば一時ファイルの格納先に任意のフォルダを指定できるようですね。セキュリティ上の問題さえクリアすれば、分離ストレージよりは柔軟に実現できるかもしれません。

_________________
............................................................................................
masa          blog 始めてみました。
[ track4 labo. ]
http://maasa.cside.com/blog/track4labo/
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2008-05-08 15:50
rainさんmasaさん

お返事ありがとうございます。
CacheToDiskという機能について実装してみました。

rpt.document.CacheToDisk = true
rpt.document.CacheToDiskLocation = C:\DM
rpt.run(false)

として実行してみました。
するとC:\DM直下にディスクに.tmpファイルが作成
されそのファイルがだんだんと大きくなっていった
のですが150メガまできたあたりでまた同じエラー
(メモリ不足)でアボートしてしまいました。
ハードディスクの容量がたりないとは思えないので
何か実装の方法でもわるいのでしょうか?

何かわかれば宜しくお願いします。
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2008-05-09 11:34
すみません。

勘違いしてた部分がありまして

rpt.document.CacheToDisk = true
rpt.document.CacheToDiskLocation = C:\DM
rpt.run(false)

として実行してみたところ、メモリ不足とは
別のエラーが発生しました。

"使用されたパラメーターが有効ではありません。"
というエラーメッセージに変わりました。

一応ChacheToDiskを使用することで変化がみられた
のですが、同じくエラーとなってしまいます。

上記エラーの回避方法、意味等わかる方がおられる
でしょうか?
後バーコードを出力するようにするだけでものすごく
処理に時間がかかりメモリを使用する量も増える
みたいなのですが、みなさんもこんな感じなのでしょうか

よければ教えて下さい。
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2008-05-11 00:15
メモリや一時ファイルのサイズとはまったく別の原因で発生している可能性はありませんか?例外メッセージだけでなく、型やスタックトレースからも情報を得られると思います。
これまではリソース不足が先に発生していたため、この例外が発生する箇所まで到達していなかったのかもしれません。

それでもだめならグレープシティのサポートも利用してみてもよいかも。
だいたい翌営業日までには返信がもらえると思います。


_________________
............................................................................................
masa          blog 始めてみました。
[ track4 labo. ]
http://maasa.cside.com/blog/track4labo/
1

スキルアップ/キャリアアップ(JOB@IT)