06-22-2018, 07:28 PM
いつもお世話になっております。
今回はCurlでのExcel出力について質問がございます。
CurlからActiveXを用いてExcelにデータを書き込んで保存(Excel出力)を行っているのですが、
パフォーマンスが悪く、出力を行うのに10分程度かかってしまいます。
以前から出力の処理は行っていたのですが、今回はデータ行数が1万程度存在し
列も100列程度ありますのでデータはかなり多いものとなります。
パフォーマンスを上げるためにgarbage-collectを導入したところ少しは改善されたのですが
それでもまだ遅いままとなっています。
何かパフォーマンスを上げる方法等がありましたら教えて頂きたいです。
※パフォーマンスを上げる為にやっていること
●DBから取得したデータをRecordSetに入れてループしながらExcelに書き込む際に
FastArray配列にデータを入れ、それをRangeを使用して行単位でデータを書き込んでいます。
●上記ループで200行処理を行う毎に{garbage-collect}を実行しています。
→毎行実行すると処理が遅くなったので、ある程度処理を行ってからメモリの解放を行っています。
調査してみて速度が遅い箇所は
・RangeでExcelにデータを書き込む箇所
→行単位でFastArrayで書き込んでいますが、もしかしたら複数行まとめて書き込めるのかな?とおもってやってみましたが、行単位にはデータを書き込めませんでした....
・RangeでExcelの行に背景色を設定している箇所
→各行毎の値に応じて背景色が変わるので、一括で複数行の背景色を設定できない為
ループ毎に背景色を設定しています。
+もう1点!!!
開発環境のPCで出力を行ったときと別PCで出力を行ったときでかなり出力までの時間が変わってきます...
メモリサイズは同じでどちらも負荷がかかっていない状態での出力処理なのですが、何が問題か
分からずにいます。。。
以上、よろしくお願いいたします。
今回はCurlでのExcel出力について質問がございます。
CurlからActiveXを用いてExcelにデータを書き込んで保存(Excel出力)を行っているのですが、
パフォーマンスが悪く、出力を行うのに10分程度かかってしまいます。
以前から出力の処理は行っていたのですが、今回はデータ行数が1万程度存在し
列も100列程度ありますのでデータはかなり多いものとなります。
パフォーマンスを上げるためにgarbage-collectを導入したところ少しは改善されたのですが
それでもまだ遅いままとなっています。
何かパフォーマンスを上げる方法等がありましたら教えて頂きたいです。
※パフォーマンスを上げる為にやっていること
●DBから取得したデータをRecordSetに入れてループしながらExcelに書き込む際に
FastArray配列にデータを入れ、それをRangeを使用して行単位でデータを書き込んでいます。
●上記ループで200行処理を行う毎に{garbage-collect}を実行しています。
→毎行実行すると処理が遅くなったので、ある程度処理を行ってからメモリの解放を行っています。
調査してみて速度が遅い箇所は
・RangeでExcelにデータを書き込む箇所
→行単位でFastArrayで書き込んでいますが、もしかしたら複数行まとめて書き込めるのかな?とおもってやってみましたが、行単位にはデータを書き込めませんでした....
・RangeでExcelの行に背景色を設定している箇所
→各行毎の値に応じて背景色が変わるので、一括で複数行の背景色を設定できない為
ループ毎に背景色を設定しています。
+もう1点!!!
開発環境のPCで出力を行ったときと別PCで出力を行ったときでかなり出力までの時間が変わってきます...
メモリサイズは同じでどちらも負荷がかかっていない状態での出力処理なのですが、何が問題か
分からずにいます。。。
以上、よろしくお願いいたします。