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

わんくま同盟

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

C# と VB.NET の入門サイト


■83274 / )  Re[3]: 大量のテキストファイルをマルチスレッドで高速に読み込む方法
□投稿者/ 魔界の仮面弁士 (1190回)-(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 割程度削減できる気がします。


データ量が多いので、手順が多少増えたとしても、メモリの破棄と再確保の
頻度と総量を減らす方が、結果的に高速化に貢献するものと予想。
(本当に高速化するかは、検証してみないと分からないですけれども)
返信 編集キー/


管理者用

- Child Tree -