トミー・カーリエの答えは私に考えさせました…。
違いを視覚化する良い方法は、sysinternals Process Monitorを実行しながら、以下と同様の2つのスニペット(私はLinqPADを使用しました)を別々に実行することです。
while(true)
File.GetLastAccessTime([file path here]);
と
FileInfo bob = new FileInfo(path);
while(true){
string accessed = bob.LastAccessTime.ToString();
}
最初のスニペットの実行中にProcessMonitorを見ると、LinqPADプロセスのファイルへの繰り返しの継続的なアクセス試行が表示されます。2番目のスニペットは、ファイルへの最初のアクセスを実行します。このアクセスについては、プロセスモニターでアクティビティが表示され、その後はほとんど表示されません。
ただし、ファイルを変更すると(FileInfoを使用して監視していたテキストファイルを開き、文字を追加して保存したところ)、LinqPADプロセスによるファイルインプロセスモニターへの一連のアクセス試行が表示されます。
これは、それぞれ2つの異なるアプローチのキャッシュされていない動作とキャッシュされた動作を示しています。
キャッシュされていないアプローチは、ハードドライブに穴を開けますか?!
編集
私は自分のテストを賢く感じて去り、WindowsサービスでFileInfoのキャッシュ動作を使用しました(基本的にはループに座って、処理を行う前に「Has-file-changed-has-file-changed ...」と言います)
このアプローチは私の開発ボックスでは機能しましたが、本番環境では機能しませんでした。つまり、ファイルが変更されたかどうかに関係なく、プロセスは実行を続けました。結局、チェックへのアプローチを変更し、その一部としてGetLastAccessTimeを使用しました。実稼働サーバーでの動作が異なる理由はわかりませんが、現時点ではあまり心配していません。