Was ist der beste Weg, um große Dateien anzuzeigen, ohne große Mengen an Speicher?
-
22-08-2019 - |
Frage
Viele Hex-Editoren, wie Hex Workshop können auch große Dateien lesen, während einen relativ geringen Speicherbedarf zu halten, aber immer noch glatt zu halten verwalten scrollen. Ich bin auf der Suche nach dem besten Weg, dies zu erreichen, und so habe ich mehrere ähnliche Fragen.
Sollte ich nur Filestream?
- Ist seine Pufferung basierend auf der aktuellen Position suchen? (Wird es in der Regel PageFault beim Rückwärts Scrollen?)
- Wenn ich einen Wrapper für Filestream erstellen, die nur intern Suche verwendet, werde ich verletzt Filestream-Fähigkeit richtig zu puffern? (Das heißt, die Leistung leidet stark von wiederholtem suchenden, auch wenn es in der Nähe sucht? Kann ich vertrauen auf dem Buffering Algorithmus oder den Disk-Scheduler, um die Leistung nach oben zu halten?)
Wäre es besser, Memory-Mapped I / O zu benutzen? (Ich erwarte, dass nur wirklich Dateien bis zu vielleicht 100 MB)
- Scrollen Würde von der Suche / Springen / schnell PageFaults Ausgaben spürbare Performance schaffen
?
Letztlich haben die Daten angezeigt werden. Soll ich die gesamte Datei als Bitmap übertragen und Teile des Bildes auf Änderungen ungültig machen (lassen Sie die Scroll-Steuerung zu tun sein eigenes Paging auf dem Bild), oder soll ich nur den aktuellen Anzeigebereich erzeugen auf Scroll-Ereignissen?
Also kurz gesagt, du Seite der Daten, das erzeugte Bild oder beides, oder bekomme ich / sie erzeugen, wie gebraucht? Was sind die (WPF / .NET) Bibliotheken / API-Objekte am besten geeignet für diese Aufgabe?
Lösung
Sie scheinen bereits die Antwort.
Die allgemeine Lösung für diese verwendet Memory Mapped Dateien und lassen Sie das OS Mühe mit Caching und suchen.
Versuchen Sie zunächst die einfachste und naheliegendste Lösung. Wenn es nicht zu Ihrer Zufriedenheit funktioniert, optimiert die Engpässe. vorzeitige Optimierungen ist die Wurzel aller Übel.
Andere Tipps
100 MB ist wirklich nicht so groß. Also im Speicher würde wahrscheinlich auf neue Maschinen arbeiten.
Aber Sie würden nicht wollen, um Ihre Lösung nicht skalieren, wie die Zeit vergeht. Die Minute, die Sie die Grenze übernehmen ist 100MB jemand es mit 200MB versuchen. Also würde ich empfehlen Ihnen, tun die „suchen“ Route -. Das ist der gemeinsame Weg, es zu tun