100% использование процессора в веб-приложении asp.net, управляемом xml / xslt - PullRequest
1 голос
/ 25 февраля 2010

Веб-приложение использует XML из веб-службы, который затем преобразуется в HTML с помощью XSLT. Приложение использует HttpModule для получения XML с использованием AddOnPreRequestHandlerExecuteAsync.

Используемые классы: XmlDocument - хранит XML. XslCompiledTransform - хранит преобразование, кэшируется в приложении. Асинхронный запрос HttpWebRequest с использованием BeginGetResponse / EndGetResponse HttpModule с перехваченными событиями AddOnPreRequestHandlerExecuteAsync.

Я не хочу использовать XPathDocument, если нет других возможных оптимизаций. Требуется сложный код, чтобы собрать весь XML без возможности записи в XmlDocument. Существует дополнительный XML-код, который не поступает от веб-службы, который также необходимо добавить в документ.

Любые предложения были бы хорошими. У сервера, похоже, нет проблем с памятью, если это о чем-то говорит, просто очень высокая загрузка процессора.

Спасибо.

UPDATE

После долгих поисков я обнаружил, что проблема, приводящая к гонке процессора, на самом деле была бесконечным (или почти) циклом, которого вообще не было в моем коде, и он был скрыт от моего профилирования из-за характера его появления. , Урок здесь, если он не имеет смысла, поищите альтернативное обоснование проблемы, прежде чем разрывать код на части.

Ответы [ 4 ]

0 голосов
/ 26 февраля 2010

Попробуйте использовать профилировщик. DotTrace и ANTS имеют пробные версии. Это должно помочь вам точно определить ваши проблемы. (Хорошая особенность dotTrace заключается в том, что он интегрируется с модульными тестами.)

0 голосов
/ 25 февраля 2010

Подумайте об использовании Linq to XML для преобразования - 350 кБ - это большой текстовый / XML-документ с точки зрения преобразования - это может быть быстрее, чем преобразование XSLT. См. здесь для образца.

0 голосов
/ 26 февраля 2010

Веб-сервис находится на том же сервере? Если да, то показывает ли тестирование службы высокую загрузку ЦП?

Как вы помещаете преобразованный документ в кеш?

0 голосов
/ 25 февраля 2010

Какая версия .NET? Уже давно я ничего не делал с XML / XSL, но в .NET 2.0 были некоторые проблемы с памятью в XslCompiledTransform. Хотя это может быть проблемой, это скорее всего что-то в коде. Можете ли вы предоставить образец XML и документ XSL?

Что произойдет, если вы сохраните оба в виде статических файлов и попытаетесь запустить преобразование (создайте небольшой автономный скрипт или модульный тест, который просто делает это, чтобы увидеть, если это проблема)? Убедитесь, что вы избавляетесь от объекта XslCompiledTransform, как только закончите (и документ XML).

Когда у меня возникают проблемы с XSL-преобразованиями, я обычно сохраняю образец XML-документа и применяю свой XSL в Cooktop . Сначала это немного сложно понять, но это хорошая проверка, чтобы убедиться, что в вашем XSL нет явной ошибки.

...