Как лучше всего отображать большие файлы без использования большого объема памяти?

StackOverflow https://stackoverflow.com/questions/694137

Вопрос

Многие шестнадцатеричные редакторы, такие как Hex Workshop, могут даже читать файлы большого размера, сохраняя при этом относительно небольшой объем памяти, но при этом сохраняя плавную прокрутку.Я ищу лучший способ добиться этого, и поэтому у меня есть несколько связанных с этим вопросов.

Должен ли я просто использовать FileStream?
- Буферизация основана на текущем местоположении поиска?(Будет ли обычно происходить сбой страницы при прокрутке назад?)
- Если я создам оболочку для FileStream, которая использует только Seek, не повредит ли я способности FileStream правильно буферизоваться?(т. е. сильно ли пострадает производительность от повторного поиска, даже если поиски находятся поблизости?Могу ли я полагаться на алгоритм буферизации или планировщик диска для поддержания производительности?)

Было бы лучше использовать ввод-вывод с отображением в памяти?(Я действительно ожидаю, что файлы будут размером до 100 МБ)
– Могут ли сбои страниц из-за поиска, перехода или быстрой прокрутки вызвать заметные проблемы с производительностью?

В конечном итоге данные должны быть отображены.Должен ли я визуализировать весь файл как растровое изображение и аннулировать части изображения при изменениях (позволяя элементу управления прокруткой выполнять собственную разбивку по страницам изображения) или мне следует просто генерировать текущую область отображения при событиях прокрутки?

Короче говоря, я выгружаю данные, сгенерированное изображение или и то, и другое, или получаю/генерирую их по мере необходимости?Какие библиотеки/объекты API (WPF/.Net) лучше всего подходят для этой задачи?

Это было полезно?

Решение

Кажется, у вас уже есть ответ.
Общим решением для этого является использование Файлы, отображенные в памяти и пусть ОС заморачивается с кэшированием и поиском.
Сначала попробуйте самое простое и очевидное решение.Если это вас не устраивает, оптимизируйте узкие места. Преждевременная оптимизация — корень всех зол.

Другие советы

100 МБ на самом деле не так уж и много.Так что память, вероятно, будет работать на новых машинах.

Но вы бы не хотели, чтобы ваше решение со временем не масштабировалось.В ту минуту, когда вы предполагаете, что предел составляет 100 МБ, кто-то попробует использовать 200 МБ.Поэтому я бы рекомендовал вам пойти по пути «поиска» — это обычный способ сделать это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top