2012-03-16 66 views
3

FileSystemWatcherに問題があります。FileSystemWatcher InternalBufferSizeの理想的なサイズは何ですか?

私は、短時間でフォルダ内に作成された非常に素晴らしいファイル量を監視する必要のあるアプリケーションがあります。

私が開発を開始したとき、私のバッファが64kb未満であれば、通知されていない場所に多くのファイルがあることに気付きました。これはマイクロソフトの推奨です。私は2621440バイトの私のために働いた値に達するまで、これを超えてバッファサイズを増やしてみました!

このケースには小さいサイズを使用すること、または理想的なバッファサイズはどのようにすることをお勧めしますか?

私のコード例:

WATCHER = new FileSystemWatcher(SignerDocument.UnsignedPath, "*.pdf"); 
WATCHER.InternalBufferSize = 2621440; //Great and expensive buffer 2.5mb size! 
WATCHER.IncludeSubdirectories = true; 
WATCHER.EnableRaisingEvents = true; 
WATCHER.Created += new FileSystemEventHandler(watcher_Created); 
WATCHER.Renamed += new RenamedEventHandler(watcher_Renamed); 

そして、何Microsoftは.NET 2.0これについてで言う:それは交換することができない非ページメモリ から来ているよう

バッファサイズを増やすには、高価であり、ディスクに書き込むため、バッファーは まで可能な限り小さくしてください。バッファオーバーフローを回避するには、NotifyFilterと IncludeSubdirectoriesプロパティを使用して、不要な変更通知を除外します。 通知。 リンク:FileSystemWatcher.InternalBufferSize Property

答えて

4

あなたの代わりにインスタント通知の「定期的なスイープ」アプローチを選ぶしたい場合があり、このような巨大なワークロードのために。たとえば、5秒ごとにディレクトリをスキャンして、追加されたファイルを処理できます。ファイルを処理した後に別のディレクトリに移動すると、定期的な作業負荷が最小になることさえあります。

これは、処理コードがクラッシュしても、通知とは異なり、常にチェックポイントが失われることはないため、より安全なアプローチです。

2

バッファを4 KB以上に設定できますが、64 KBを超えてはいけません。 InternalBufferSizeプロパティを4096バイト未満に設定しようとすると、値は破棄され、InternalBufferSizeプロパティは4096バイトに設定されます。最高のパフォーマンスを得るには、Intelベースのコンピュータで4 KBの倍数を使用します。

投稿日: http://msdn.microsoft.com/de-de/library/system.io.filesystemwatcher.internalbuffersize(v=vs.110).aspx

関連する問題