Я полагаю, что, когда у вас есть несколько гигабайт оперативной памяти, естественно, тяготеет к пути «загрузить весь файл в память», но действительно ли кто-нибудь здесь действительно удовлетворен таким поверхностным пониманием проблемы? Что происходит, когда этот парень хочет загрузить файл размером 4 гигабайта? (Да, вероятно, маловероятно, но программирование часто связано с масштабируемыми абстракциями, и быстрое исправление загрузки всего этого в память просто не масштабируется.)
Конечно, существуют противоречивые проблемы: вам нужно вчерашнее решение или у вас есть время, чтобы разобраться в проблеме и узнать что-то новое? Каркас также влияет на ваше мышление, представляя файлы блочного режима в виде потоков ... вы должны проверить значение BaseStream.CanSeek потока и, если это так, получить доступ к методу BaseStream.Seek (), чтобы получить произвольный доступ. Не поймите меня неправильно, мне очень нравится .NET Framework, но я вижу строительную площадку, где кучка «плотников» не может поднять каркас дома, потому что воздушный компрессор сломан, а они - нет. уметь пользоваться молотком Воск, воск, научить человека ловить рыбу и т. Д.
Так что, если у вас есть время, посмотрите в раздвижное окно. Вы, вероятно, можете сделать это простым способом, используя отображенный в памяти файл (пусть framework / OS управляет скользящим окном), но самое интересное решение - написать его самостоятельно. Основная идея заключается в том, что в каждый момент времени в память загружается только небольшая часть файла (часть файла, которая видна в вашем интерфейсе, возможно, с небольшим буфером с обеих сторон). По мере продвижения по файлу, вы можете сохранять смещения начала каждой строки, чтобы вы могли легко найти любой более ранний раздел файла.
Да, это влияет на производительность ... добро пожаловать в реальный мир, где каждый сталкивается с различными требованиями и ограничениями и должен найти приемлемый баланс между временем и использованием памяти. Это удовольствие от программирования ... выяснение различных способов достижения цели и изучение компромиссов между различными путями. Вот как вы растете выше уровня навыков того парня в офисе, который видит каждую проблему как гвоздь, потому что он знает только, как использовать молоток.
[/ декламация]