Я делаю некоторые эксперименты с IronPython 2.6.1 и функцией clr.CompileModules для компиляции больших скриптов в сборки. Тестирование показало хорошие улучшения производительности при холодном запуске, но в некоторых случаях импорт скомпилированного модуля на самом деле медленнее, чем выполнение большой строки, представляющей мой код в некоторых случаях.Производительность IronPython с компилированным кодом
Мой вопрос, если я использую что-то вроде
scope.Engine.Execute(string.Format("from {0} import {0}", theModule), scope);
или функции ImportModule
, даже если я получаю новый ScriptSCope обратно делает кэш DLR импорт, достигнутый в других ScriptScopes? Так что, если модуль 1 и модуль 10 импортируют один и тот же тип, я получаю только один раз?
Используется clr.CompileModules
предпочтительнее scope.Compile()
? Мое понимание - компиляция на лету полезна, если я не хочу управлять дополнительными сборками и хочу только заплатить за компиляцию.
Спасибо, я запустил dotTrace над приложением, а переход на скомпилированный код IronPython определенно похож на путь вперед для работы с холодным запуском. Однако я все еще вижу большое время, проведенное в ImportModule. У меня есть одна сборка с 29 включенными модулями, и я запускаю «из панели импорта foo» внутри той же области, а затем извлекаю переменную, являющуюся классом в C# для использования. Уменьшат импортные зависимости, которые эти модули уменьшают, что время импорта заключается в том, что время импорта самого модуля? –