08.02.2022, 23:26 | #1 |
Участник
|
List/Set/Map/Array: deep clone через pack/create в классических Аксаптах
выделил в отдельную тему отсюда
Оптимизация класса Tax Цитата:
я обычно deep clone делаю как раз через pack/create. Можно подробнее? Что значит "многократную вставку"? |
|
09.02.2022, 11:45 | #2 |
Участник
|
Ну вот я пробовал паковать, распаковывать исходный Map.
Ну если бы там не было Set, то было бы просто куча Map::insert. То есть она бегает в цикле по контейнеру который ей передается в create и вызывает Map::insert. Кстати контейнеры тут тоже вынужденно используются при запаковке распаковке. |
|
|
За это сообщение автора поблагодарили: mazzy (10). |
09.02.2022, 12:08 | #3 |
Участник
|
у меня нет сейчас под рукой 2012.
можете сюда приложить код метода unpack, который приводит к такому трейсу? Последний раз редактировалось mazzy; 09.02.2022 в 12:12. |
|
09.02.2022, 14:18 | #4 |
Участник
|
Код в D365FO:
X++: public boolean unpack(container _packedClass) { boolean success = false; Version version = RunBase::getVersion(_packedClass); container packedCollection; switch (version) { case #CurrentVersion: [version, #CurrentList, packedCollection] = _packedClass; oneToManyCollection = Map::create(packedCollection); success = true; break; } return success; } |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
09.02.2022, 14:47 | #5 |
Участник
|
другими словами, системный метод Map::create отслеживается трассировщиком...
похоже, что системный map::create реализован на X++, а не на системном уровне. спасибо! прикольно, чё. |
|
09.02.2022, 17:00 | #6 |
Участник
|
Цитата:
Если бы элементарные типы были то думаю за один вызов сработало бы. Но надо пробовать, чтобы точно быть уверенным. |
|
|
|