2011-01-01 5 views
6

Vor kurzem bemerkte Detailbeschreibung von FILE_FLAG_NO_BUFFERING Flag in MSDN und lesen Sie mehrere Google-Suchergebnisse über ungepufferte E/A in Windows.Mit FILE_FLAG_NO_BUFFERING wird eine merkliche Geschwindigkeitsverstärkung zurückgegeben?

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

ich jetzt fragen, ist es I/O-Programmierung in der Datei ungepufferte Option zu prüfen wirklich wichtig? Da viele Programme normale C-Stream-I/O- oder C++ - Iostream-Programme verwenden, habe ich dem Flag "FILE_FLAG_NO_BUFFERING" zuvor keine Aufmerksamkeit geschenkt.

Nehmen wir an, wir entwickeln ein Foto-Explorer-Programm wie Picasa. Wenn wir ungepufferte I/O implementieren, kann die Geschwindigkeit der Miniaturbildanzeige bei normalen Benutzern merkliche Unterschiede anzeigen?

+0

+1 zu beiden Antworten, danke! Ich habe gepuffertes & ungepuffertes Laden von Dateien mit meinem alten Foto-Explorer-Projekt getestet. Da es nur sequentiell gelesen wird, ist das Szenario nicht dramatisch langsamer und kann auch keine merkliche Beschleunigung feststellen. – 9dan

+0

Ich denke, es kann sichergestellt werden, dass ungepufferte Datei-I/O nichts mit Endbenutzer-Anwendungen zu tun hat :) – 9dan

Antwort

7

Nein, dieses Flag ist nicht für typische Festplattenbenutzer. Es ist für Programme wie Datenbanken, wo sie ihre eigene Datei-Cache-Verwaltung für optimale Leistung durchführen müssen. Während ich sicher bin, dass Sie Situationen finden könnten, in denen es Ihr Programm beschleunigen würde, würden Sie in den meisten Fällen die vom Betriebssystem bereitgestellte Pufferung verwenden wollen - deshalb ist es da.

+1

Ich muss nicht zustimmen. Gehen Sie voran und kopieren Sie 40-GB-Dateien zwischen Servern mithilfe der vom Betriebssystem bereitgestellten Pufferung. Ihr Server wird nicht mehr genügend Arbeitsspeicher und Crawl haben. Sehr schlecht in der Produktion. Wir müssen dieses Flag verwenden, wenn große Datenbankdateien zwischen Servern verarbeitet werden. – Brain2000

+2

@ Brain2000: Was sind Sie nicht einverstanden? Ich sagte: "Es ist für Programme, die ihr eigenes Datei-Cache-Management für optimale Leistung durchführen müssen", und Sie haben ein Beispiel für ein solches Programm angegeben. Es klingt, als ob du mir wirklich zustimmst. – Gabe

+0

Wenn das Deaktivieren des Caching unter "eigene Datei-Cache-Verwaltung ausführen" fällt, dann stimme ich Ihnen zu. – Brain2000

11

Oh Herr nein. Sie machen es erheblich langsamer mit dieser Flagge. Es umgeht den Dateisystemcache, dieses wundervolle Stück Code, das mit fast psychischer Genauigkeit erraten kann, dass Sie Sektor N + 1 nach dem Lesen von N lesen wollen. Und lädt es nur vor, wenn es billig zu bekommen ist.

Es ist besonders schlecht für das Schreiben, weshalb die Option existiert, erhalten Sie nicht die faul Write-Back. Das bedeutet, dass Ihr Programm nur so schnell ausgeführt werden kann, wie die Festplatte schreiben kann. Was sehr, sehr langsam ist. Der Vorteil der Flagge ist, dass Sie sicher sein können, dass sie geschrieben wurde. Hilft beim Implementieren von Transaktionsdiskettenupdates, die für dbase-Engines wichtig sind.

Aber versuchen Sie dies für sich selbst, um den Effekt zu sehen.

Verwandte Themen