Добрый день. Выделяю все элементы на виде рамкой - получаю 22 тысячи. Нахожу у каждого элемента ближайший уровень снизу. В try обрабатываются- FamilyInstance, в Catch -системные (трубы ,воздуховоды и тд). Имею одну транзакцию. В начале открываю и в самом конце (после цикла по всем элементам). Если это FamilyInstance нахожу ближайший уровень - высчитываю новое смещение - и устанавливаю элементу новый уровень - записываю значение параметра "этаж" с нового уровня в параметр "этаж" элемента. Если это системное , все аналогично , кроме смещение (его не будет). Пишу много if(ов) так, как есть такие трудности - точка расчета площади, на грани и тд ( мне это нужно для нового смещение). Например, если семейство имеет "точку расчета площади", то я беру не LocationPoint.Z, а "GetSpatialElementCalculationPoint().Z" и смещение задаю по "BoundingBoxXYZ.Min.Z" , чтобы не "скакало". . Фотографии кода прикладываю.
Статистика:
- файл ВК 3.5 тысячи- обработал за 2 минуты.
- файл ОВ 22 тысячи - обработал за 1 час 20 минут.
Причем, в начале к каждому елементу применял две транзакции и коллектор искал заново , НО
на время это никак не повлияло - 1 час 20 мин , как и был.
С результатом работы, пока вопросов нет, но время хотелось бы сократить.
1 вопрос - как сократить время?
2 вопрос - почему при изменение с двух транзакций на одну общую в программе - результат по времени одинаковый ?