2011-01-01 9 views
6

Niedawno zauważyłem szczegółowy opis flagi FILE_FLAG_NO_BUFFERING w MSDN i przeczytałem kilka wyników wyszukiwania Google o niebuforowanych we/wy w systemie Windows.Użycie FILE_FLAG_NO_BUFFERING spowoduje zauważalne zwiększenie prędkości?

http://msdn.microsoft.com/en-us/library/aa363858(v=vs.85).aspx

ja zastanawiałem się, czy to naprawdę ważne, aby rozważyć opcję niebuforowane w pliku I programowanie/O? Ponieważ wiele programów używa zwykłego starego I/O strumienia C lub iostream w C++, wcześniej nie zwracałem uwagi na flagę FILE_FLAG_NO_BUFFERING.

Załóżmy, że tworzymy program do eksploracji zdjęć, taki jak Picasa. Jeśli implementujemy niebuforowane wejścia/wyjścia, czy szybkość wyświetlania miniatur może pokazać zauważalną różnicę u zwykłych użytkowników?

+0

+1 do obu odpowiedzi, dziękuję! Testowałem zbuforowane i niebuforowane ładowanie plików przy pomocy mojego starego projektu eksploratora zdjęć. Ponieważ jest to scenariusz tylko sekwencyjny, nie ma dramatycznego spowolnienia i nie można zauważyć żadnej zauważalnej prędkości. – 9dan

+0

Myślę, że można mieć pewność, że niebuforowane pliki I/O nie mają nic wspólnego z aplikacjami końcowymi :) – 9dan

Odpowiedz

7

Nie, ta flaga nie jest przeznaczona dla typowych użytkowników dysków. Dotyczy to programów takich jak bazy danych, w których muszą one wykonywać własne zarządzanie pamięcią podręczną plików, aby uzyskać optymalną wydajność. Chociaż jestem pewien, że można znaleźć sytuacje, w których przyspieszyłoby to twój program, w większości przypadków chciałbyś używać buforowania dostarczanego przez system operacyjny - dlatego właśnie tam jest.

+1

Muszę się nie zgodzić. Śmiało i skopiuj pliki o rozmiarze 40 GB między serwerami przy użyciu bufora systemu operacyjnego. Na Twoim serwerze zabraknie pamięci i indeksowania. Bardzo źle w produkcji. Musimy używać tej flagi podczas kopiowania dużych plików baz danych między serwerami. – Brain2000

+2

@ Brain2000: Z czym się nie zgadzasz? Powiedziałem: "To jest dla programów, które muszą wykonać własne zarządzanie pamięcią podręczną plików dla optymalnej wydajności", a ty dostarczyłeś przykład takiego programu. Wygląda na to, że się ze mną zgadzasz. – Gabe

+0

Jeśli wyłączenie buforowania obejmuje "wykonywanie własnego zarządzania pamięcią podręczną plików", to tak, zgadzam się z tobą. – Brain2000

11

O Panie, nie. Robisz to znacznie wolniej, używając tej flagi. Pomija pamięć podręczną systemu plików, ten cudowny kawałek kodu, który może odgadnąć z niemal psychiczną dokładnością, że będziesz chciał przeczytać sektor N + 1 po przeczytaniu N. I po prostu wczytuje go, jeśli jest on tani.

Jest to szczególnie szkodliwe dla pisania, dlatego opcja istnieje, nie dostajesz leniwego odpisu. Co oznacza, że ​​twój program może działać tylko tak szybko, jak dysk może pisać. Który jest bardzo, bardzo powolny. Zaletą flagi jest to, że możesz być pewien, że została napisana. Pomaga w implementowaniu uaktualnień dysków transakcyjnych, takich, o które dbają silniki dbase.

Ale spróbuj tego dla siebie, aby zobaczyć efekt.

Powiązane problemy