Это возможно, и я не уверен, что StringBuilder каким-то образом позволяет Regex работать более эффективно, но IMO - это не то, на что вам следует полагаться. Если у вас не хватает памяти, это может указывать на большую проблему дизайна, которую следует решить.

я есть журнал исключений из одного из выпусков производственного кода.

System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
   at System.Text.RegularExpressions.Match..ctor(Regex regex, Int32 capcount, String text, Int32 begpos, Int32 len, Int32 startpos)
   at System.Text.RegularExpressions.RegexRunner.InitMatch()
   at System.Text.RegularExpressions.RegexRunner.Scan(Regex regex, String text, Int32 textbeg, Int32 textend, Int32 textstart, Int32 prevlen, Boolean quick)
   at System.Text.RegularExpressions.Regex.Run(Boolean quick, Int32 prevlen, String input, Int32 beginning, Int32 length, Int32 startat)
   at System.Text.RegularExpressions.MatchCollection.GetMatch(Int32 i)
   at System.Text.RegularExpressions.MatchEnumerator.MoveNext()

Данные, которые он пытается обработать, составляли около 800 КБ.

В моих локальных тестах это работает отлично. Вы когда-нибудь видели подобное поведение, в чем может быть причина?

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

Мои регулярные выражения:

РЕДАКТИРОВАТЬ 2:

Я думаю, что именно этот RegEx вызывает проблему, когда я тестирую его в изолированной среде, он мгновенно пожирает память.

((?:( |\.\.|\.|""|'|=)[\/|\?](?:[\w#!:\.\?\+=&@!

РЕДАКТИРОВАТЬ

Я был не прав с моим местным тестом. Я загружал большую строку, затем добавлял к ней материал, который вызывал головокружение .NET Framework, а затем выдавал исключение OOM во время RegEx, а не во время строковых операций (или случайным образом, так что игнорируйте предыдущий материал, который я сказал).

Это приложение .NET Framework 2.0.

~*,;\/\(\)\[\]\-]|%[0-9a-f]{2})*)( |\.|\.\.|""|'| ))?

РЕДАКТИРОВАТЬ

Я был не прав с моим местным тестом. Я загружал большую строку, затем добавлял к ней материал, который вызывал головокружение .NET Framework, а затем выдавал исключение OOM во время RegEx, а не во время строковых операций (или случайным образом, так что игнорируйте предыдущий материал, который я сказал).

Это приложение .NET Framework 2.0.

Ответы на вопрос(3)

Ваш ответ на вопрос