2008-10-29 14 views
6

Używam FileStream do zapisywania do pliku i oglądania wywołań systemowych bazujących przy użyciu Process Monitor. Mam problem z niektórymi problemami z blokowaniem plików w ramach wdrożenia produkcyjnego, dlatego dokładnie sprawdzam szczegóły.Zapisywanie do pliku FileStream zachowuje się dziwnie, co zaobserwował monitor procesu

Ten przykładowy kod:

 using (FileStream fs = new FileStream("c:\\temp\\test.txt", FileMode.Create, FileAccess.Write, FileShare.Read)) 
     { 
      fs.Write(new byte[] { 1, 2, 3, 4, 5 }, 0, 5); 
      fs.Close(); 
     } 

Powoduje następujące systemy połączeń:

9:27:09.4561092 AM ConsoleApplication1.vshost.exe 2320 CreateFile C:\temp\test.txt SUCCESS Desired Access: Generic Read/Write, Disposition: OverwriteIf, Options: Synchronous IO Non-Alert, Non-Directory File, Open No Recall, Attributes: n/a, ShareMode: Read, AllocationSize: 0, OpenResult: Overwritten 
9:27:12.2217409 AM ConsoleApplication1.vshost.exe 2320 WriteFile C:\temp\test.txt SUCCESS Offset: 0, Length: 5 
9:27:12.2219901 AM ConsoleApplication1.vshost.exe 2320 CloseFile C:\temp\test.txt SUCCESS 
9:27:12.2234484 AM ConsoleApplication1.vshost.exe 2320 CreateFile C:\temp\test.txt SUCCESS Desired Access: Generic Read, Write Attributes, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Complete If Oplocked, Random Access, Attributes: N, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 
9:27:12.2248664 AM ConsoleApplication1.vshost.exe 2320 QueryBasicInformationFile C:\temp\test.txt SUCCESS CreationTime: 10/29/2008 9:04:14 AM, LastAccessTime: 10/29/2008 9:27:12 AM, LastWriteTime: 10/29/2008 9:27:12 AM, ChangeTime: 10/29/2008 9:27:12 AM, FileAttributes: A 
9:27:12.2250075 AM ConsoleApplication1.vshost.exe 2320 SetBasicInformationFile C:\temp\test.txt SUCCESS CreationTime: -1, LastAccessTime: -1, LastWriteTime: -1, ChangeTime: -1, FileAttributes: n/a 
9:27:12.2255889 AM ConsoleApplication1.vshost.exe 2320 QueryStandardInformationFile C:\temp\test.txt SUCCESS AllocationSize: 8, EndOfFile: 5, NumberOfLinks: 1, DeletePending: False, Directory: False 
9:27:12.2257571 AM ConsoleApplication1.vshost.exe 2320 ReadFile C:\temp\test.txt SUCCESS Offset: 0, Length: 5 
9:27:12.2259825 AM ConsoleApplication1.vshost.exe 2320 ReadFile C:\temp\test.txt SUCCESS Offset: 0, Length: 5 
9:27:12.2261588 AM ConsoleApplication1.vshost.exe 2320 ReadFile C:\temp\test.txt SUCCESS Offset: 0, Length: 5 
9:27:12.2265161 AM ConsoleApplication1.vshost.exe 2320 ReadFile C:\temp\test.txt SUCCESS Offset: 0, Length: 2 
9:27:12.2268237 AM ConsoleApplication1.vshost.exe 2320 ReadFile C:\temp\test.txt SUCCESS Offset: 0, Length: 5 
9:27:12.2271332 AM ConsoleApplication1.vshost.exe 2320 ReadFile C:\temp\test.txt SUCCESS Offset: 0, Length: 5 
9:27:12.2272841 AM ConsoleApplication1.vshost.exe 2320 ReadFile C:\temp\test.txt SUCCESS Offset: 0, Length: 5 
9:27:12.2274779 AM ConsoleApplication1.vshost.exe 2320 ReadFile C:\temp\test.txt SUCCESS Offset: 0, Length: 5 
9:27:12.2276249 AM ConsoleApplication1.vshost.exe 2320 ReadFile C:\temp\test.txt SUCCESS Offset: 0, Length: 5 
9:27:12.2278766 AM ConsoleApplication1.vshost.exe 2320 ReadFile C:\temp\test.txt SUCCESS Offset: 0, Length: 5 
9:27:12.2282577 AM ConsoleApplication1.vshost.exe 2320 ReadFile C:\temp\test.txt SUCCESS Offset: 0, Length: 5 
9:27:12.2284476 AM ConsoleApplication1.vshost.exe 2320 QueryFileInternalInformationFile C:\temp\test.txt SUCCESS IndexNumber: 0x2d000000016b88 
9:27:12.2286183 AM ConsoleApplication1.vshost.exe 2320 CloseFile C:\temp\test.txt SUCCESS 
9:27:12.2288759 AM ConsoleApplication1.vshost.exe 2320 CreateFile C:\temp\test.txt SUCCESS Desired Access: Read Attributes, Write Attributes, Disposition: Open, Options: , Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 
9:27:12.2305722 AM ConsoleApplication1.vshost.exe 2320 QueryBasicInformationFile C:\temp\test.txt SUCCESS CreationTime: 10/29/2008 9:04:14 AM, LastAccessTime: 10/29/2008 9:27:12 AM, LastWriteTime: 10/29/2008 9:27:12 AM, ChangeTime: 10/29/2008 9:27:12 AM, FileAttributes: A 
9:27:12.2307379 AM ConsoleApplication1.vshost.exe 2320 CloseFile C:\temp\test.txt SUCCESS 

oczekuje Pierwsze trzy połączenia IO (create, pisać, blisko), ale proces przechodzi do przeczytaj plik jeszcze kilkanaście razy i wielokrotnie go otwieraj i zamykaj.

Obserwowałem to zachowanie w Win XP SP2 i Win 2003 x64. Jednak moja maszyna z systemem Windows Vista w domu zachowuje się zgodnie z oczekiwaniami (tylko pierwsze trzy linie).

Jakieś wskazówki, dlaczego tak się dzieje w środowiskach innych niż Vista?

Odpowiedz

6

Jedną z możliwości jest zainstalowanie skanera antywirusowego, który wstrzykuje się w każdy działający proces?

+0

Chociaż nie mogę tego potwierdzić, ma to sens. Podejrzewałem, że na początku, ale wyeliminowano go ze względu na dostęp pokazujący, że pochodzi on z mojego EXE, a nie skanera antywirusowego. Nie wiedziałem, że skaner antywirusowy może wstrzyknąć się w mój proces. – TheSoftwareJedi

+0

również zauważyć, że to skaner wirusów POS, jeśli musi przeczytać ten plik 11 razy. – TheSoftwareJedi

+0

Jak działa odczyt skanera antywirusowego z ConsoleApplication1.vshost.exe? – configurator

Powiązane problemy