Как использовать механизм XSLT .NET 2.0 из приложения .NET 1.1?

Я работаю над сборкой .NET 1.1, которая выполняет ряд огромных преобразований XSL. Это начинает вызывать проблемы с памятью. Поэтому я хочу использовать механизм XSLT в среде .NET 2.0, так как знаю, что он намного эффективнее и требует меньше ресурсов. Примечание. Обновление сборки .NET 1.1 до .NET 2.0 в настоящее время НЕ ВОЗМОЖНО из-за ограничений по времени и бюджету (вне моего контроля).

Я написал сборку .NET 2.0, которая может выполнять XSL-преобразования, и представил ее как объект взаимодействия COM+. Когда я загружаю этот объект из сборки .NET 1.1, он загружается нормально, но как только я загружаю преобразование XSL, возникает исключение, и он не содержит НИКАКОЙ полезной информации о том, что пошло не так.

Интересно, что если я вызову более простой, несвязанный тестовый метод в сборке .NET 2.0 (например, метод, который просто записывает в журнал событий, а не выполняет преобразование), он работает.

Любые идеи об альтернативных подходах? Или есть что-то очевидное, что я делаю неправильно?

Любая помощь будет принята с благодарностью! Спасибо!


person Community    schedule 03.06.2009    source источник
comment
Если вы не можете заставить COM-взаимодействие работать (какие типы вы передаете между компонентами?), вы все равно можете выполнить преобразование как отдельный процесс командной строки.   -  person Dirk Vollmar    schedule 03.06.2009
comment
Я передаю довольно много параметров командной строки, таких как XMLReader, XPathNavigator и некоторые другие. Не знаю, может ли это повлиять. Но мне точно нужны все параметры. Не уверен, как я мог бы передать эти параметры, если бы я пошел по маршруту командной строки... но, возможно, стоит изучить. Спасибо!   -  person    schedule 05.06.2009


Ответы (2)


Я подозреваю, что COM-взаимодействие само по себе убивает любое повышение производительности, которое вы получите от обновления XSLT до версии 2.0. Вероятно, также имеет какое-то отношение к бесполезному исключению.

Пробовали запускать сборку 1.1 под 2.0? См. эту страницу для получения инструкций о том, как ориентироваться на конкретную версию фреймворка. Я не очень хорошо знаком с базовыми механизмами XSLT, но просто переключение цели может дать вам игрушки 2.0, и это определенно даст вам производительность 2.0.

person Wyatt Barnett    schedule 03.06.2009
comment
К сожалению, попытка запуска под .NET 2.0 оказалась безрезультатной. Система слишком велика, чтобы можно было просто переключить цель. Когда это делается, несколько частей выходят из строя. К сожалению, это вне моего контроля. Спасибо, в любом случае! - person ; 05.06.2009

Рассмотрим Process.Start() в средство msxsl.exe. Он не использует .NET. Или, если вы все равно используете COM-взаимодействие, рассмотрите MSXML — он также поддерживает XSL и БЫСТРО.

person Cheeso    schedule 04.06.2009
comment
Спасибо. Сейчас я рассматриваю командную строку, но пока не уверен, хочу ли я использовать msxml/msxsl или написать приложение командной строки .NET 2.0 для выполнения этой работы. - person ; 05.06.2009
comment
возможно, эталон MSXML6 против System.Xml. Компонент MSXML всегда был быстрым и эффективным, даже при вызове из Javascript или VBScript — большая часть работы для XSLT выполняется в скомпилированном коде C++ в MSXML. Также попробуйте свойство MSXML6 NewParser. msdn.microsoft.com/en-us/library/ms767616.aspx . Я думаю, что при использовании msxsl.exe используется MSXML3 или 4. (не 6) - person Cheeso; 05.06.2009
comment
Если система действительно большая — слишком большая для перехода на .NET 2.0, рассмотрите возможность использования подхода, который поддается масштабированию. Разбить XSLT на отдельный процесс может быть не такой уж плохой идеей. Может быть, сделать это службой Windows, которая прослушивает именованный канал для сокет-коммуникаций. - person Cheeso; 05.06.2009