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

わんくま同盟

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

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


■83272 / )  Re[2]: 大量のテキストファイルをマルチスレッドで高速に読み込む方法
□投稿者/ 金尾 (13回)-(2017/03/16(Thu) 09:39:54)
Azuleanさん

> 配列の中の文字数を調べてみていって、何文字くらいになっているか、数量を適当に量ってください。
もちろん数量のはかり方は分かるのですが
そのはかった数量をどのようにして共有したら良いのか分からないのですが
Split関数では生成した配列をそのままコピーされますので
前回使用した配列のサイズなどは流用できないと思うのですが
どのようにすれば良いですか?

魔界の仮面弁士さん

> 何故 ReadLine を使わない方法に変更されたのでしょうか?

これは
魔界の仮面弁士さん自身も仰っているように
> しかし同一の物理ドライブ上にある場合は、マルチスレッドにすることで、
> むしろ遅くなってしまう可能性が高そうです。

これが起きるためです。
SSDだとそれほど違いはないですがHDDでReadlineのコードをマルチスレッド化すると
3倍くらい速度が落ちる結果が得られました。
ストレージからデータをメモリに読み込む部分だけは
シングルスレッドにしておき、
読み込んだデータをストリング配列にする部分だけをマルチスレッド化しないと
逆に速度が低下してしまいます。

> の一括読み取りなら File.ReadAllBytes の方がスマートに書けそうですし
実際にはファイルの全てを読み込む必要はなく、後半の8割程度のみが必要なためです
File.ReadAllBytes だと、ファイルの一部のみを読み込むことができません。


ニートプログラマさん

> がある内容なので注目しています。えっとまずは
> 本当にCPUを100%使えるのかを確認したらいかが
> でしょう??


マルチスレッドはこれまでに何度も作成していますので
CPU使用率が100%になるのは確認でてきます



返信 編集キー/


管理者用

- Child Tree -