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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top