Как вы ищете большой текстовый файл для строки, не проходя строка за строкой в ​​C #? - PullRequest
13 голосов
/ 19 января 2010

У меня большой текстовый файл, который мне нужен для поиска определенной строки. Есть ли быстрый способ сделать это без чтения построчно?

Этот метод очень медленный из-за размера файлов (более 100 МБ).

Ответы [ 14 ]

0 голосов
/ 19 января 2010

Если вы ищете только определенную строку, я бы сказал, что строка за строкой - лучший и наиболее эффективный механизм.С другой стороны, если вы собираетесь искать несколько строк, особенно в нескольких разных точках приложения, вам может понадобиться заглянуть в Lucene.Net , чтобы создать индекс, а затем запросить индекс,Если это однократный запуск (т. Е. Вам не потребуется запрашивать тот же файл позже), вы можете создать индекс во временном файле, который будет автоматически очищаться системой (обычно во время загрузки; или выможете удалить его самостоятельно при выходе из программы).Если вам понадобится выполнить поиск в том же файле позже, вы можете сохранить индекс в известном месте и во второй раз получить гораздо лучшую производительность.

0 голосов
/ 19 января 2010

Проблема скорости здесь может заключаться в скорости загрузки файла в память перед выполнением поиска. Попробуйте профилировать приложение, чтобы увидеть узкое место. Если он загружает файл, вы можете попробовать «разбить» загрузку файла так, чтобы файл передавался небольшими порциями, и для каждого фрагмента выполнялся поиск.

Очевидно, что если часть найденной строки находится в конце файла, повышение производительности не будет.

0 голосов
/ 19 января 2010

У меня большой текстовый файл, который мне нужен для поиска конкретной строки. Есть ли быстрый способ сделать это без чтения построчно?

Единственный способ избежать поиска по всему файлу - это предварительно отсортировать или организовать ввод. Например, если это файл XML, и вам нужно выполнить много таких поисков, имеет смысл проанализировать файл XML в дереве DOM. Или, если это список слов, и вы ищете все слова, которые начинаются с букв «aero», может иметь смысл сначала отсортировать весь ввод, если вы выполняете много такого поиска в одном и том же файле .

0 голосов
/ 19 января 2010

Если вы хотите ускорить построчное чтение, вы можете создать приложение на основе очереди:
Один поток читает строки и помещает их в потокобезопасную очередь. Затем второй может обработать строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...