4

私の質問は、ハードディスクの断片化を回避する方法に似ていますか? 、しかし、サイズが 2 MB から 100 + MB の範囲の可能性がある 1 日あたり数百のファイルを生成します (その質問者は、ディスクが乱雑になることをより心配していたため、ファイルが小さいことを暗示していました。私の問題は、これらのファイルを読み取るパフォーマンスです)。これらのファイルは、一度に少しずつ書き込まれます (ログ データ)。これは、断片化を作成する最良の方法です。(データベースはオプションではありません。) コードが完全に書き込まれた後にデフラグする必要がありますが、ファイルが同じ日に読み戻されるとパフォーマンスが低下します。

それを行う方法は、 How can I limit file fragmentation while working with .NET?によって提案されているようです。; 彼らは詳細が不足しています(そして私はC ++を使用しています)。最初に SetFilePointerEx() と SetEndOfFile() を使用してファイルのサイズを 2 MB に設定し、ファイルが割り当てられたサイズに達したら、観察された増加率に基づいてサイズを変更します。その後、書き込みが完了したら、実際のデータ サイズにリサイズします。

私が目にする 1 つの落とし穴 (実際にはhttp://www.cplusplus.com/forum/windows/22114/で指摘されています) は、アプリがクラッシュしたり、コンピューターがシャットダウンした場合に起こることです。現在、ファイルに不明なデータがあり、Windows でそれを検出する方法がありません。これは、ファイルごとまたは単一のファイルに書き込まれたデータの量を追跡するためにファイルを作成することを示唆しています。より良い戦略はありますか?おそらく、後で検出できるように、各書き込みの後に十分なゼロを書き込む (そして、次の書き込みの準備ができるようにバックアップする) でしょうか?

私が見逃した他の問題はありますか?

4

1 に答える 1

2

事前割り当て方式を使用して、500MB 単位でファイル サイズを増やします。ビデオ データであるため、別のインデックス ファイルも保存します。これを読み取って検証し、最後の (有効であると考えられる) データがいつあるかを確認します。

データがテキストの場合、これは少し面倒かもしれませんが、null データを無視して最後に書き込むことができ、おそらく 2MB 境界にジャンプしますか?

于 2012-05-08T11:12:51.140 に答える