C # множественные замены регулярных выражений в строке - слишком много памяти

По сути, я хотел бы запустить несколько (15-25) замен регулярных выражений в одной строке с наилучшим возможным управлением памятью.

Обзор: Передает поток только текстового файла (иногда html) через ftp, добавляя его к StringBuilder , чтобы получить очень большую строку. Размер файла колеблется от 300 КБ до 30 МБ.

Регулярные выражения являются полусложными, но требуют нескольких строк файла (например, для определения разделов книги), поэтому произвольно разрыв строки или выполнение замены при каждой загрузке цикл не отвечает.

Пример замены:

Regex re = new Regex("<A.*?>Table of Contents</A>", RegexOptions.IgnoreCase);
source = re.Replace(source, "");

Я знаю, что при каждом запуске замены небесных ракет с памятью это происходит потому, что строка неизменна в C #, и ей нужно сделать копию - даже если я позвоню GC.Collect () этого недостаточно для файла размером 30 МБ.

Любой совет по лучшему подходу или способу выполнения нескольких замен регулярных выражений с использованием постоянной памяти (сделайте 2 копии (так 60MB в памяти), выполните поиск, это сокращает количество замен, когда регулярные выражения не основаны друг на друге (полезно в этом случае для очистки неверного ввода) - см. ответ Брайана Райхла для примера кода.

Всем спасибо!

8
задан WSkid 16 April 2011 в 22:01
поделиться