Schnellste Technik zum Lesen einer Datei in den Speicher?
Ist es, eine allgemein akzeptierte Schnellste Technik, die verwendet wird zum Lesen einer Datei in den Speicher in c++?
Ich nur das Lesen der Datei.
Habe ich gesehen, boost haben eine Implementierung und ich habe gesehen, ein paar andere Implementierungen hier, aber ich würde gerne wissen, was als die Schnellste?
Danke im Voraus
Falls es eine Rolle spielt, ich bin am überlegen Dateien bis zu 1GB und das ist für windows.
- Der Schnellste Weg ist zu Lesen, zusammenhängende Blöcke, deren Größe ausgerichtet ist, mit dem Puffer auf die Festplatte (z.B. 8MB, wenn Ihre Festplatte hat einen 8MB Puffer).
- Ist es wirklich wichtig? Bist du sicher? Haben Sie profiliert Ihren code und der Beweis, dass, wie lange es dauert, die Datei zu Lesen, ist ein problem? Wenn ja, werden Sie wahrscheinlich benötigen, um mit OS-spezifische Einrichtungen, um maximale Leistung.
- Es würde helfen wenn du sagst was genau wollen Sie mit der Datei machen.
- möglich, Duplikat der Was ist der beste Weg, um zu schlürfen, eine Datei in einen std::string in c++?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden memory-mapped-Dateien, vielleicht mit boost-wrapper für die Portabilität.
Wenn Sie möchten, das Lesen von Dateien, die größer als die freier, zusammenhängender Teil Ihres virtuellen Adressraums, können Sie das zugeordnete Teil der Datei auf.
#include <boost/interprocess/file_mapping.hpp>
", so nehme ich an, es ist eine header-only-Bibliothek.Erwägen Sie die Verwendung Memory-Mapped-Dateien für Ihren Fall, wie Sie können die Dateien bis 1 GB Größe.
Hier beginnen Sie mit der win32-API:
Gibt es mehrere andere hilfreiche API auf der MSDN-Seite.
istream
. Über den link gehen, um zu wissen, was es ist. Wenn ich es erklären in wenigen Worten, dann wird es nicht tun Sie etwas gutes für Sie, und möglicherweise ist es unzutreffend sein könnte.In der Veranstaltung, die memory-mapped-Dateien sind nicht ausreichend für Ihre Anwendung und Datei-I/O ist dein Flaschenhals, mit einem I/O completion port zu handhaben async I/O auf die Dateien wird am schnellsten sein, die Sie bekommen können, auf Windows.
Generell mmap es ist. Aber n Windows, die Sie erfunden haben Ihren eigenen Weg, dies zu tun, siehe "Datei Zuordnen". Boost hat Memory-Mapped-Dateien Bibliothek, umschließt beide Möglichkeiten unter einem tragbaren Haufen code.
Auch, Sie zu optimieren für Ihren Anwendungsfall-wenn Sie möchten, schnell sein. Nur mapping-Datei mit dem Inhalt in den Speicher ist nicht genug. Es ist tatsächlich möglich, dass Sie nicht brauchen, memory-mapped-Dateien und könnte besser mit asynchronen Datei-I/O, zum Beispiel. Es gibt viele Lösungen für viele Probleme.