6

Windows のディスク最適化とディスク チェックの背後にあるロジックは何ですか? C# コーディングを使用して実行できますか?

4

5 に答える 5

3

Mark Russinovichは、少し前にWindows NTDiskDefragmentationの内部に詳細な記事を書いています。本当にこれを実行したい場合は、デフラグに組み込みの機能を使用することをお勧めします。さらに、最近のOSでは、ユーザーとしてデフラグを気にする必要さえ見たことがありません。それはスケジュールに従って自動的に行われ、MSのNTFSの人々はあなたよりも間違いなく賢いです(申し訳ありませんが、彼らはしばらくの間これを行います、あなたはそうしません)。

于 2009-07-06T08:14:53.690 に答える
3

可能性のある API ヘルパーについては、msdn のDefragmenting Filesを参照してください。

このタスクに C# を使用する場合は、ネイティブ Win32 へのマーシャリングで望ましくないオーバーヘッドが発生する可能性があるため、慎重に検討する必要があります。

于 2009-07-06T07:59:06.200 に答える
3

最適化のロジックがわからず、ファイル システムを自分で作成していないため、正式にエラーをチェックできない場合は、'defrag' と 'chkdsk' を実行する新しいプロセスを開始してみませんか?

于 2009-07-06T08:00:20.300 に答える
1

その重要性にもかかわらず、ファイルシステムは、ファイル名をディスクブロックのリストにマップするデータ構造にすぎません。また、ファイルの実際の長さや、ファイルのリストを保持する特別なファイル(ディレクトリなど)などのメタ情報を追跡します。ディスクチェッカーは、データ構造に一貫性があることを確認します。つまり、すべてのディスクブロックは、ファイルへの割り当てのために解放されているか、単一のファイルに属している必要があります。また、ディスクブロックのセットがディレクトリにあるはずのファイルであるように見えるが、何らかの理由でそうではない特定のケースをチェックすることもできます。

デフラグとは、各ファイルに割り当てられているディスクブロックのリストを確認することです。通常、ファイルは、ディスク全体に散在しているブロックではなく、連続したブロックのセットを使用すると、より高速にロードされます。また、一般に、使用中のすべてのディスクブロックがディスクの単一の連続した範囲に限定されている場合、ファイルシステム全体が最高のパフォーマンスを発揮します。したがって、トリックは、ファイルシステムを破壊せずに、この目的を達成するためにディスクブロックを安全に移動することです。

ここでの主な問題は、ディスクの使用中にこれらのアプリケーションを実行することです。可能ですが、ある種の明白なまたは非常に微妙なエラーを発生させたり、ほとんどまたはすべてのファイルを破壊したりしないように、非常に、非常に、非常に注意する必要があります。オフラインでファイルシステムを操作する方が簡単です。

もう1つの問題は、ファイルシステムの複雑さに対処することです。たとえば、NTFSではなくFAT32をサポートするものを構築する方がはるかに優れています。これは、NTFSがはるかに単純なファイルシステムであるためです。

低レベルのブロックアクセスと、並行性の問題に対処するための賢明な方法(使用されていないときにファイルシステムで作業するのが最適)がある限り、C#、perl、または任意の言語でこれを行うことができます。

ただし、十分に注意してください。 プログラムの初期のバージョンは、ファイルシステム全体を破壊します。それ以降のバージョンはそうしますが、あいまいな状況下でのみです。また、データを破棄すると、ユーザーは非常に怒り、訴訟を起こします。

于 2009-07-06T08:06:30.100 に答える