Yvision.kz
kk
Разное
Разное
399 773 постов42 подписчика
Всяко-разно
-4
03:35, 02 августа 2011

.NET Framework, System.Xml, MSXML и "чудеса производительности"

Например, мы используем XSLT-трансформацию, как шаблонизатор в веб-приложении ASP.NET.

Первое что приходит в голову — это пространство имен System.Xml и System.Xml.Xsl, которые предоставляют универсальные классы для работы с XML и XSLT.

А теперь второе. Что не сразу приходит в голову.

Это подключение ActiveX-компонента MSXML (6.0). Который тоже предоставляет универсальные классы для работы с XML и XSLT. Собственно, сам файл библиотеки компонента (msxml6.dll) копируется в каталог с веб-приложением, а затем на него создается ссылка и уже с компонентом можно спокойно работать из веб-приложения.

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

На самом деле, всё совершенно наоборот.

Второй способ оказывается производительнее первого. То есть, подключение неуправляемого кода из библиотеки MSXML для XSLT-трансформации намного производительнее, чем использование управляемого кода из пространства имен System.Xml библиотеки .NET.

Время XSLT-трансформации в веб-приложении ASP.NET:

System.Xml (.NET) — Time taken: 0,0228 sec (44) req/sec

MSXML (MSXML 6.0) — Time taken: 0,0025 sec (396) req/sec

-4
363
1