Я уже несколько раз переписывал проблемный кусок.
- Заменил все Open на использование транзакции.
- Предположил, что некорректно обрабатываются объекты из-за того, что не добавлены в базу данных. Все объекты после взрыва добавляю в базу данных, независимо от того, нужны они мне или нет. Ненужные потом удаляю в конце работы команды.
- Предположил, что DBObjectCollection как-то внутри некорректно работает. Переписал таким образом, что DBObjectCollection сразу после взрыва передаёт объекты в обычный массив и больше не используется.
- Предположил, что есть проблема, если одна транзакция на всё слишком долго держит открытыми много объектов. Переписал так, что на каждое действие открывается новая транзакция, которая закрывается сразу после выполнения действия.
Ничего не помогло
Сейчас в раздумьях: то ли оставить пока как есть - проблема возникает только в некоторых отдельных чертежах и не в 100% случаях. Либо что-то с этим ещё попробовать сделать. Но вот что именно - идей нет никаких.