mfc-ml

2003年09月

30

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

どもぉ、舞です。

> この、読み込みに2つあわせて3~5分ほど費やしています

> これをいろいろな読み方で行っているのですが、なかなか早
くなりません。
> 希望としては30秒以内におさめたい(CGIとして使用す
るため)
> のですが、なにかよい方法はないでしょうか?

そんなに時間かかるということは
ファイル読むとか以前にアルゴリズム的に
無駄な事をしてるんじゃないかなぁ?
自分では、あってると思ってるソースが
実はぜんぜんだめだとか。。。

読み込みバッファを大量にとったりしても
改善してないないところを見ると
そう思いました。
改善するべきところは他にあるかもですよ?

でわでわ


__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!  http://bb.yahoo.co.jp/
30

[mfc 46212] ファイルの高速読込(続き)charset="iso-2022-jp"

河野です。
前回の話の続きです。

csvでなにをやっているかといえば、まずメモリ(リスト)に
のせて実際の抽出作業はリストで行っています。

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

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

原因が、ファイルアクセスにあるというのは、要所にデバッグを
仕掛けてみたところ、一番時間がかかっていたのがファイルから
リストへの展開でした、実際の抽出処理はリストに読み込んでから
おこなっているのですが、これはほぼ瞬時に終わっております。

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

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

フレッツ始めるなら今 !キャンペーン実施中!
               http://www.livedoor.com/flets/
30

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



藤沢です。

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

ある程度たまったらファイルに書きます。
この繰り返しで早いと思っていますが駄目ですかね?
ディスクアクセスを減らしてメモリ展開するとかなり速い
と思ってます。
(かけだしプログラマ3年目ですが。。。)
最後にクローズ。

予断ですが、newやdeleteは遅いです。
速さを追求するならば固定長でメモリ確保をお勧めしま
す。

----- Original Message ----- 
From: <s...@livedoor.com>
To: "ProgramingWithVC++" <m...@sakura.acty-net.ne.jp>
Sent: Tuesday, September 30, 2003 1:30 PM
Subject: [mfc 46204] ファイルの高速読込
Subject: [mfc 46204] ファイルの高速読込


> いつもお世話になっております。
> 河野ともうします。
>
> 現在、抽出プログラムを作ろうとしますが、その中で
> 3000件を越えるCSVファイルを2つほどよみこまなければ
> なりません。
>
> この、読み込みに2つあわせて3~5分ほど費やしています。
> これをいろいろな読み方で行っているのですが、なかなか早くなりません。
> 希望としては30秒以内におさめたい(CGIとして使用するため)
> のですが、なにかよい方法はないでしょうか?
>
> ちなみに、いままで試した方法は次のとおりです。
> 1.fgetsによるループ
> 2."rb"オープンでfgetcによるループ
> 3.freadによるループ(バッファ長256,500,2500,3500,5500,9500でそれぞれ試
>   すも目立った違いなし)
> 4."rb"オープンでfreadによるループ
>
>
> フレッツ始めるなら今 !キャンペーン実施中!
>                http://www.livedoor.com/flets/
>
>
>
>
30

[mfc 46210] Re: EN_KILLFOCUS後の処理を教えてください。【解決しました】

質問者の田中です。
とりあえず下記のように対処いたしまいた。
長らく風邪(?っていわれたけど・・・)で出社
できてませんでしたのでレスが遅れて
もうしわけありません。

以上 宜しくお願いいたします。

>書くのが大変に思えるかも知れませんが、内部処理は別関数へまと
>めてしまえば良いわけで、さほど変わらないと思います。
30

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

こなです。

いろいろ試してみましたが、CSVファイルなどはただのテキストファイルですの
で読み込むだけで分単位の時間がかかることはまずなさそうです。
(1行1000文字×3000行でも1秒かからない)
まず、単純にファイルを読み込むだけのコードにしてみてください。
どれだけかかっていますか?
もし、私の実験結果どおり1秒以内なら、いくらfread()とかfgets()とかそんな
ところをつついても速くはなりません。
3分 - 1秒 ≒ 3分
だからです。

まずは3~5分のうちで最も時間のかかっている処理を見つけましょう。
Professional以上のVCを使用していれば、どこが速度のネックになっているか簡
単に調べることができます。
「プロファイル」という機能です。
詳しくは、[mfc 45303]からの内容を参照してください。

-- 
こな <k...@yahoo.co.jp>
記事検索
Amazon.co.jp
  • ライブドアブログ