odpowiedź Tommy Carlier jest mi do myślenia ...
Dobrym sposobem na zwizualizowanie różnic jest osobne uruchomienie dwóch fragmentów kodu (po prostu użyłem LinqPAD) w sposób opisany poniżej, a także uruchomiony monitor procesu.
while(true)
File.GetLastAccessTime([file path here]);
i
FileInfo bob = new FileInfo(path);
while(true){
string accessed = bob.LastAccessTime.ToString();
}
Jeśli spojrzeć na monitor Process podczas uruchamiania pierwszego fragmentu widać powtarzające się i ciągłe próby dostępu do pliku dla procesu LINQPad. Drugi fragment będzie początkowy dostęp do pliku, dla którego zobaczysz działania w monitorze procesu, a następnie bardzo niewiele później.
Jeśli jednak zmienisz plik (właśnie otworzyłem plik tekstowy, który monitorowałem za pomocą FileInfo i dodałem znak i zapisałem), zobaczysz serię prób dostępu przez proces LinqPAD do pliku w monitorze procesu.
To ilustruje zachowanie bez buforowania i buforowane w dwóch różnych podejściach.
Czy metoda bez pamięci podręcznej nosi otwór w dysku?
EDIT
wyjechałem czując wszystko mądry nad moim testowania, a następnie wykorzystywane zachowanie buforowania FileInfo w moim usługi windows (w zasadzie siedzieć w pętli i powiedzieć: „Ma-file-changed-HAS- zmieniono plik ... "przed wykonaniem przetwarzania)
Chociaż to podejście działało na moim polu dev, nie działało w środowisku produkcyjnym, tj. proces właśnie działał bez względu na to, czy plik się zmienił, czy nie. Zmieniłem moje podejście do sprawdzania i użyłem GetLastAccessTime jako części tego. Nie wiem, dlaczego zachowałoby się inaczej na serwerze produkcyjnym ... ale nie jestem tym specjalnie zainteresowany.
Zauważyłem również, że te funkcje dają niewiarygodne informacje; np. gdy plik znajduje się w udziale sieciowym (samba). Zauważyłem, że dokumenty MSDN (http://msdn.microsoft.com/en-us/library/system.io.file.getlastaccesstime(v=VS.90).aspx) mówią teraz: "Ta metoda może zwrócić niedokładną wartość. . " –