05.03.2024, 18:42 | #1 |
Участник
|
Разные настройки отладки в кластере аосов Ax2012 R3
Обнаружил странную вещь.
У нас на рабочей на части аосов отладка выключена, а на части включена. Это приводит к неожиданным эффектам. При старте аоса (SysCompileIL::synchronizeAssembly()) аксапта сравнивает файл записанный в sysXppAssembly с именем X++: sysXppAssembly.FileName == 'Dynamics.Ax.Application.dll' Тут все нормально. А дальше идет прикол. В том же методе (SysCompileIL::synchronizeAssembly()) стоит вызов X++: // Disable jit if debugging is enabled on AOS
SysCompileIL::setDebuggingMode(); X++: select firstOnly IsDebug from sysXppAssembly where sysXppAssembly.FileName == #XppDllName; if (sysXppAssembly && sysXppAssembly.IsDebug != Debug::isDebugOnAOSEnabled()) { ... Microsoft.Dynamics.Ax.Xpp.XppILGenerator::createManifestAssembly(#XppDllName, assemblyPath, AppVersion, Debug::isDebugOnAOSEnabled(), false); ... SysCompileIL::uploadFiles(modifiedFiles, true, true); ... } (конечно это будет только если настройка отладки на аосе отличается от настройки аоса, на котором собирали CIL) Поэтому если рестартануть аос с ВКЛЮЧЕННОЙ отладкой то в sysXppAssembly для Dynamics.Ax.Application.dll будет создана запись с взведенным признаком isDebug и с dll в поле SysXppAssembly.File скомпилированной как отладочная. А если рестартануть аос с ВЫКЛЮЧЕННОЙ отладкой, то в sysXppAssembly для Dynamics.Ax.Application.dll будет перезаписана запись со снятым признаком isDebug и с dll в поле SysXppAssembly.File скомпилированной как релизная. При этом еще при рестарте в SysCompileIL::synchronizeAssembly() будут заново из базы закачаны все *.dll, *.netModule, *.pdb файлы, на что уйдет время (притом что изменялся только один dll файл) По-моему тут какая-то ошибка. Явно авторы закладывались на то что все аосы в кластере имеют одну и ту же настройку отладки. На практике это не так. Хотя бы один отладочный аос все любят на рабочей держать. Кто-нибудь разбирался с этой особенностью ? От этого ничего не ломается ? (легко получить, что часть компонентов сборки собрана c одним параметром отладки, а другая с другим) Я думаю что как минимум надо держать в sysXppAssembly две записи для 'Dynamics.Ax.Application.dll' - отладочную и релизную и для выгрузки и сравнений выбирать одну из двух в соответствие с настройками аоса. Но тогда уж и остальной цил тоже надо в двух версиях держать. Либо они принципиально не отличаются поэтому прокатит и так как сейчас и достаточно просто пофиксить сравнение, чтобы зря не выгружала файлы там, где в этом нет необходимости (оптимизируя тем самым время старта АОСа) ? |
|
|
За это сообщение автора поблагодарили: Товарищ ♂uatr (4), sukhanchik (8). |
05.03.2024, 19:19 | #2 |
Участник
|
Привет.
С точки зрения библиотеки это просто дополнительные инструкции, что занимают место и как следствие их наличия снижают быстродействие. Поэтому на тему отказоустойчивости не стоит даже и думать. Концепция хранить 2 сборки выглядит прикольно, только в угоду чему, брать на себя издержки по двойной компиляции. Тут всё зависит от культуры разработки в компании. Последний раз редактировалось Товарищ ♂uatr; 05.03.2024 в 19:29. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
05.03.2024, 19:27 | #3 |
Участник
|
Склоняюсь к тому, чтобы захардкодить признак отладки независимо от настроек аоса и все.
|
|
05.03.2024, 20:42 | #4 |
Участник
|
Цитата:
Насчет быстродействия еще добавлю что в аксапте для Debug версии запрещен JIT. Это тоже может немного снизить скорость. |
|
05.03.2024, 22:41 | #5 |
Участник
|
"Debug версии запрещен JIT" прям покоя не давало...в итоге это скорее трудности перевода...
CIL вот эта штука собирает: Microsoft.Dynamics.AX.Xpp.ILGenerator.dll Интересует: Microsoft.Dynamics.Ax.Xpp.XppILGenerator.createManifestAssembly Параметр "isDebug" отвечает за добавление флага DebuggableAttribute.DebuggingModes.DisableOptimizations к переменной значение которой уже равно Default. В итоге получаем "Tracking on, JIT optimizations disabled" Подробнее тут можно почитать: https://learn.microsoft.com/en-us/do...s?view=net-8.0 Последний раз редактировалось Товарищ ♂uatr; 05.03.2024 в 23:00. |
|
06.03.2024, 11:01 | #6 |
Участник
|
Да, походу JIT вообще не отключаемый
https://stackoverflow.com/questions/...et-application |
|
Теги |
cil |
|
|