Dave Kreskowiak
Ну, вы можете сделать это немного быстрее, заменив эту конкатенацию строк StringBuilder. Почему? Потому что строки в .NET неизменяемы. Однажды созданные,вы не можете изменить их. То, что вы делаете с этой конкатенацией, - это создание нового строкового объекта каждый раз, когда вы добавляете к нему что-то.
Вы также, вероятно, могли бы получить очень незначительное улучшение скорости, заменив .ReadAllLines StreamReader и обрабатывая файл строка за строкой по одному за раз. Вы также сэкономите себе 200 МБ памяти и, возможно, немного поменяете местами страницы.
Если вы ищете один символ в конце каждой строки, вы можете получить еще один импульс, рассматривая каждую строку, которая будет строкой, как массив символов и, в частности, посмотрите на последний индекс в массиве для этого символа. Это позволит избежать некоторых накладных расходов .Метод EndsWith. Вы пишете что-то, что специализируется на просмотре последнего символа вместо того, чтобы использовать более общий вариант использования, который ищет всю строку символов.
Другие способы ускорить процесс включают в себя предварительную обработку текстового файла и создание индекса. Это займет то количество времени, которое вы сейчас тратите на построение индекса. Тогда достаточно легко и намного быстрее получить нужные вам строки с помощью индекса. Но я не думаю, что это то, о чем ты говоришь.