dravoss Ответов: 1

Очень быстрый способ фильтрации всех писем заканчивается специальным caractere в большом текстовом файле с помощью C#


Привет ,

я хочу очень быстрый способ отфильтровать все электронные письма, которые заканчиваются специальным карактером в большом текстовом файле (более 200 МБ) с помощью c#

Что я уже пробовал:

var lines = файл.ReadAllLines(путь к файлу);

foreach(var line in lines)
{
если (строка.EndsWith(myWord))
{
выходные сообщения.Текст += линия + окружающая среда.Строки;
}
}

1 Ответов

Рейтинг:
0

Dave Kreskowiak

Ну, вы можете сделать это немного быстрее, заменив эту конкатенацию строк StringBuilder. Почему? Потому что строки в .NET неизменяемы. Однажды созданные,вы не можете изменить их. То, что вы делаете с этой конкатенацией, - это создание нового строкового объекта каждый раз, когда вы добавляете к нему что-то.

Вы также, вероятно, могли бы получить очень незначительное улучшение скорости, заменив .ReadAllLines StreamReader и обрабатывая файл строка за строкой по одному за раз. Вы также сэкономите себе 200 МБ памяти и, возможно, немного поменяете местами страницы.

Если вы ищете один символ в конце каждой строки, вы можете получить еще один импульс, рассматривая каждую строку, которая будет строкой, как массив символов и, в частности, посмотрите на последний индекс в массиве для этого символа. Это позволит избежать некоторых накладных расходов .Метод EndsWith. Вы пишете что-то, что специализируется на просмотре последнего символа вместо того, чтобы использовать более общий вариант использования, который ищет всю строку символов.

Другие способы ускорить процесс включают в себя предварительную обработку текстового файла и создание индекса. Это займет то количество времени, которое вы сейчас тратите на построение индекса. Тогда достаточно легко и намного быстрее получить нужные вам строки с помощью индекса. Но я не думаю, что это то, о чем ты говоришь.