У меня есть приложение, что для меня определили задачу с чисткой после. Само приложение относительно просто - оно выполняет SQL-запрос, использует веб-сервис и извергает результаты к файлу журнала. Мое задание состоит в том, чтобы заархивировать файлы к нашему NAS после того, как приложение будет сделано с ними. Это блокирует файлы исключительно, пока это не сделано с ними так, это добавляет маленький бит сложности. Мне также не разрешают коснуться приложения, просто журналы. Так или иначе мое приложение довольно просто:
Мои работы кода, это является просто очень трудоемким (файлы журнала - каждый приблизительно 500 МБ). Мои мысли об улучшении включают запуск моего поиска от нижней части файла вместо от вершины, но StreamReader не поддерживает такой метод. Я не могу использовать метод ReadToEnd и затем инвертировать чтение, потому что это просто бросает из исключения памяти. Какие-либо мысли о пути я мог ускорить парсинг файла журнала?
Я предполагаю, что вы ищете один маркер в конце файла, чтобы определить, закончен ли он? Если да, то я также предполагаю, что маркер имеет известную длину, например, один байт или последовательность из 3 байт и т.д.
Если вышеприведенные предположения верны, вы можете открыть FileStream, Seek до конца файла за вычетом ожидаемой длины маркера, прочитать байты и, если маркер присутствует и завершен, вы знаете, что можете обрабатывать файл.
Поиск до конца -3 байта может быть выполнен с помощью кода, подобного следующему
// Seek -3 bytes starting from the end of the file
fileStream.Seek(-3, SeekOrigin.End);