C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.83274 の関連記事表示

<< 0 >>
■83274  Re[3]: 大量のテキストファイルをマルチスレッドで高速に読み込む方法
□投稿者/ 魔界の仮面弁士 -(2017/03/16(Thu) 10:40:34)
    2017/03/16(Thu) 10:46:28 編集(投稿者)

    No83272 (金尾 さん) に返信
    > ストレージからデータをメモリに読み込む部分だけは
    > シングルスレッドにしておき、
    ストレージからの読み取りは、どうあっても 10 分間を要すると思っていたのですが、

    > 実際にはファイルの全てを読み込む必要はなく、後半の8割程度のみが必要なためです
    を実施していたために、実際にはそれより短い時間で処理できる目算ということなのですね。

    # 情報の後出し(というか、提示のサンプルと実際の処理との乖離)が他にもありそうな予感…。


    > Split関数では生成した配列をそのままコピーされますので
    > 前回使用した配列のサイズなどは流用できないと思うのですが
    > どのようにすれば良いですか?

    「何を目的として Split を使っているのか」を説明していただいていないため
    今回の事象に適合できるか分からないですが、元のコードの
     Encoding.UTF8.GetString(bs).Split(c)
    だと、「元のバイナリ」「それを文字列化したもの」「さらにそれを分割したもの」
    が必要なので、元データの約 3 倍のメモリを消費することになると思います。

    現状のこの、
      UTF-8 Binary → String → 改行単位の String()
    という変換処理を見直して、
      UTF-8 Binary → 改行文字の位置のみを列挙 → 必要な部分だけ随時 String 化
    という手順にすれば、消費メモリを 3 割程度削減できる気がします。


    データ量が多いので、手順が多少増えたとしても、メモリの破棄と再確保の
    頻度と総量を減らす方が、結果的に高速化に貢献するものと予想。
    (本当に高速化するかは、検証してみないと分からないですけれども)
記事No.83253 のレス /過去ログ142より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -