mfc-ml

2003年09月

30

[mfc 46218] Re:ファイルの高速読込(続き)

溝井と申します。

On Tue, 30 Sep 2003 16:52:47 +0900 (JST)
s...@livedoor.com san wrote:

> 同時実行があるかといえば、CGIですからこれは当然ありえます。
> ただファイルとしては、Read Onlyですので問題はない
> と考えています。

 LAN内での使用頻度程度なら・・・

> ちなみに二つのcsvファイルですが、
> 1つ目はコードの項目が1、名称項目が4つという構成で、
> 2つ目はコードの項目が1、名称項目が2つという構成です。
> したがって件数は多いのですが、とりたてて大きいというほどのものでも
> ありません。

 所要時間から、一行が何十万文字もあるようなCSVファイルを想像していました(^^;;
 この程度のデータ量で数分かかるのは異常です。

 何方か書かれていましたがメモリの確保と開放には時間がかかります。
 
  一行ごとにメモリの確保開放を行うような操作は入っていませんか。
  リストに挿入する一行バッファの長さをむやみに大きくしてたりしませんか。
  リストクラスは自分で作成されたものでしょうか。
30

[mfc 46217] RE: ファイルの高速読込(続き)

 渋木です。

> 原因が、ファイルアクセスにあるというのは、要所にデバッグを
> 仕掛けてみたところ、一番時間がかかっていたのがファイルから
> リストへの展開でした、

 あともう1歩詳細に分析してみませんか?

 データ規模から見て、ファイル読み込みよりも「リストへの展開」がボトル
ネックになっているような気がします。

 リスト構造には何を使っていますか?

 STL のコレクションを使っているなら、アロケータや、拡張サイズを変更する
ことで性能向上が見込めるかもしれません。

--
// 渋木宏明 (Hiroaki SHIBUKI)
// http://www.hidori.jp/
// Microsoft MVP 2002-2003 of Windows
30

[mfc 46216] Re: ファイルの高速読込(続き)

なかの@こどもねっとです。

「[mfc 46212] ファイルの高速読込(続き)(<2...@SMTP.MyNET.JP>)」への返信です。


他の人からも同じ様な話が出ているかもしれませんが・・・

>後、よみこみだけではなく読み込む際になにをしていているかと
>いえばリスト(クラス)に取り込む際に仕切文字(,)をみて項目
>別に変数に代入するという行為は行っています。
>
>原因が、ファイルアクセスにあるというのは、要所にデバッグを
>仕掛けてみたところ、一番時間がかかっていたのがファイルから
>リストへの展開でした、実際の抽出処理はリストに読み込んでから
>おこなっているのですが、これはほぼ瞬時に終わっております。

実際のソースコードを見ていないので何とも言えないのですが、
この文面を見る限りだとファイルアクセスではなくてリスト展開の
処理が遅いのではないかなと思ってしまいます。
そこの処理はどの様になっているのですか??


>したがって、READループの部分を短縮できれば早いはずなので
>fread下ではバッファ長をのばしてみたのですが、あまり速度効果
>はありませんでした。

read は一瞬、仕切り文字検査+文字列格納に時間が掛かって居そう・・・・


#と言うのが先程からの皆様のメールの内容かな。
-- 
 I wish a person well. (^^)

  なかの@こどもねっと  mailto:m...@chldren.net
  私物ページ   http://cgisv.chldren.net/~myamya/blog/
30

[mfc 46215] Re: ファイルの高速読込(続き)

寺西です。

s...@livedoor.com wrote:

> 後、よみこみだけではなく読み込む際になにをしていているかと
> いえばリスト(クラス)に取り込む際に仕切文字(,)をみて項目
> 別に変数に代入するという行為は行っています。

それをとりあえずやめて、読み込んだデータを捨ててみても、速度に
差がないかどうか確認してみてはいかがでしょう。
 
> 原因が、ファイルアクセスにあるというのは、要所にデバッグを
> 仕掛けてみたところ、一番時間がかかっていたのがファイルから
> リストへの展開でした、実際の抽出処理はリストに読み込んでから
> おこなっているのですが、これはほぼ瞬時に終わっております。

ということでしたら、リストへの展開に時間がかかっているのでは
ないかと思います。ここがとても怪しい。

とりあえず、リストへの展開はやめて、読み出すだけにしてテスト
してみましょう。それで劇的に速くなれば、リストへの展開がボトル
ネックだということになります。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  y...@asahi-net.or.jp
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E
30

[mfc 46213] Re:ファイルの高速読込

溝井です。

 はじめまして。

On Tue, 30 Sep 2003 16:30:42 +0900
"Fujisawa Yohei" <f...@saki.netwk.ntt-at.co.jp> san wrote:


> 藤沢です。

> 自分はランタイムライブラリはまず使用しないです。
> APIを使って
> CreateFile
> ReadFile
> で開きっぱなし。
> あとはメモリマップドファイルでディスクアクセスを極力
> 減らします。

> ある程度たまったらファイルに書きます。

 本題から外れるのですが、

 アプリケーションの目的にもよるのですが、
 開きっぱなしは、確かにパフォーマンスを優先する場合や、排他オープン
 することで余所からファイルをアクセスされるのを意図的に防ぐ場合など
 のメリットもありますが、デメリットもあります。

 リードオンリーだと問題は少ないのですが(大量に同時実行される場合は
 問題あり)ライトオープンの場合でCGI の様に特に強制中断されたりする
 可能性が高い場合は、ファイルの破損の原因にもなりますので開きっぱな
 しは避けたほうが良いように思います。
記事検索
Amazon.co.jp
  • ライブドアブログ