Не видя вашего Regex, я не знаю точно, но иногда вы можете получить такие проблемы, потому что ваши матчи являются Greedy вместо Lazy.
Механизм Regex должен хранить много информации внутри и Жадные совпадения могут закончиться тем, что Regex много раз выбирает большие секции вашей строки 800k.
Здесь есть хорошая информация об этом здесь .
Я никогда не пробовал, но моя первая мысль была бы чем-то как:
XmlNode myNode;
XNode translatedNode = XDocument.Parse(myNode.OuterXml);
Я не думаю, что существует, но почему Вы должны были бы? Каждый - самый низкий 'лист' структуры XML для различных способов прочитать документ.
При использовании Linq для Xml и XDocument, у Вас будут весь синтаксис linq-стиля и новая функциональность, но действительно все это о выборе узла.
После того как у Вас есть элемент, с которым Вы имеете дело, почему необходимо переключиться?
Блог Эрика Уайта - это место, где можно найти интересные преобразования XML / XLINQ и тому подобное. Я знаю, что этот вопрос был написан до публикации, но я нашел его, просматривая другой вопрос, так что, возможно, люди все еще сталкиваются с этим изрядным количеством. В его блоге есть много оптимизированного LINQ, и я подозреваю, что вызов .Parse () для исходного ответа неоптимален, ну, на самом деле я знаю, что это не так.
Parse требует, чтобы XML был загружен за один раз. Эрик использовал методы расширения, которые обрабатывают преобразование XML с помощью XmlReader / Writer. Эти методы могут передавать поток ввода, поэтому, если ваш XML имеет какой-либо существенный размер, вы должны их использовать.