データを処理するスレッドが多数あるアプリケーションがあります。この処理の一環として、小さなファイルをネットワーク共有に書き込んでいます。私は、次のコードを使用してFileStreamを作成します。C#FileStreamをネットワーク共有に作成するマルチスレッドアプリケーションが遅い
using (var fileStream = new FileStream("\\server\path\etc", FileMode.Create, FileAccess.Write, FileShare.None))
(毎秒100個のファイルの下の書き込み)高負荷の下での、のFileStreamの作成は(60秒以上)時間がかかることがあります。これは、アプリケーションが高負荷で数分間実行された後に発生します。
FileStreamの作成時にスレッドをブロックするものがなければなりません。おそらくスレッドがブロックされてファイル共有への接続を作成しようとしていると思いました。プロセスエクスプローラでプロセスをチェックしましたが、ファイルサーバーへのTCP接続が見つかりませんでした。だから私は、ファイルサーバーへのSMB接続がTCPではないと推測しています。
問題が何であるか、より良いパフォーマンスを達成するために私がやり方を変える方法はありますか?
これをローカルで試してみましたか?ロジックにエラーがあるのか、それとも真のネットワークであるのかを確認する問題 – MethodMan
良い点。私はこれをローカルで試してみて、同じ遅延があるかどうか確認してください。私はちょうどそれがファイル共有に書いていなければならないと仮定した。 – Mas
ローカルパスへのパスを指定しようとしましたが、このパフォーマンスの問題は存在しません。奇妙なのは、ファイル共有への書き込みがうまくいくことです。私は、このファイル共有は他の人にも使われているサーバーなので、この問題は他のユーザーからこのサーバーに多くの負荷がかかる場合にのみ発生する可能性があります。しかし、これによってFileStreamの作成が遅くなるのでしょうか? – Mas