Эффективная работа с большими наборами данных в Dynamo
На этой странице представлены некоторые практические правила эффективной работы с большими наборами данных в Dynamo. Надеемся, что вы сможете использовать эти советы для выявления узких мест в своих графах, чтобы они выполнялись за считаные минуты, а не за несколько часов.
Содержание
Создание геометрии и тесселяция
Использование памяти
API Revit
Создание геометрии и тесселяция
В Dynamo создание и рисование элемента геометрии — это совершенно разные действия. Как правило, создание геометрии выполняется намного быстрее и при этом используется меньше памяти, чем при рисовании объекта. Геометрию можно рассматривать как список измерений для создания костюма, а тесселяцию — как сам костюм. По его меркам можно рассказать о костюме довольно многое: какова длина рукавов, сколько он стоит и т. д., но почти всегда нужно посмотреть и примерить готовый костюм, чтобы понять, правильно ли он сидит. Аналогичным образом для геометрии без тесселяции можно определить ее ограничивающую рамку, площадь, объем, пересечение с другой геометрией и экспортировать ее в SAT или Revit. Тем не менее, вам почти всегда придется тесселировать геометрию, чтобы понять, правильная она или нет.
Если граф Dynamo содержит много объектов и замедляется во время выполнения, можно удалить шаги тесселяции из графа, чтобы ускорить процесс.
Узлы геометрии в Dynamo всегда тесселированы*. При этом остается два варианта работы с геометрией без тесселяции: узлы Python и узлы ZeroTouch. До тех пор, пока объект геометрии не будет возвращен из узла Python или ZeroTouch, тесселяция геометрии не выполняется. Например, если граф имеет несколько узлов точек, соединенных с несколькими узлами линий, несколькими узлами сечений и несколькими узлами толщины, тесселяция геометрии будет выполняться на каждом шаге. Вместо этого можно объединить данную логику в узел Python или ZeroTouch и возвращать из этого узла только конечный объект.
Дополнительные сведения об использовании узлов ZeroTouch см. в разделе Разработка для Dynamo данного руководства.
Использование памяти
Если тесселяция геометрии больше не выполняется, могут возникнуть проблемы с памятью из-за избыточного накопления геометрии. Геометрические объекты в Dynamo занимают небольшое, но не малое количество памяти при создании. При работе с сотнями тысяч или миллионами объектов объем использования может расти, что неизменно приводит к аварийному завершению работы Dynamo или Revit. В Dynamo версии 2.5 или более поздней это происходит неявным образом путем удаления неиспользуемых объектов, но если используется версия, предшествующая версии 2.5, один из способов избежать создания большого количества геометрии — удалить объекты по завершении работы. Предположим, что создаются сотни тысяч объектов NurbsCurve, для каждого из которых требуются десятки точек. Один из способов их создания — создать в Dynamo двумерный список и передать его узлу NurbsCurve.ByPoints. Однако для этого нужно создать миллионы точек. Еще один способ — использовать узел Python или ZeroTouch. В этом узле можно создать десяток точек, передать их в узел NurbsCurve.ByPoints, а затем удалить десяток точек с помощью вызова метода .Dispose(). Дополнительные сведения об использовании узлов ZeroTouch см. в разделе Разработка для Dynamo данного руководства. Удаление объектов геометрии после их создания может значительно сократить объем используемой памяти в определенных обстоятельствах. Хотя данная проблема решена для пользователей Dynamo 2.5 или более поздней версии, рекомендуется по-прежнему удалять геометрию явным образом, если при использовании требуется сократить объем памяти в определенный момент времени. Дополнительные сведения о новых функциях обеспечения стабильности, появившихся в Dynamo 2.5, см. в разделе Повышение стабильности геометрии в Dynamo.
API Revit
Если вы активно удаляете объекты в узле ZeroTouch или Python и по-прежнему испытываете проблемы с памятью или производительностью, возможно, потребуется полностью исключить из процесса Dynamo и создать объекты Revit непосредственно с помощью API. Например, можно выполнить синтаксический разбор файла Excel для получения информации о точках, а затем использовать эту информацию для создания координат XYZ и других элементов Revit с помощью соответствующего API. На этом этапе Revit станет единственным узким местом, которого невозможно избежать.
Last updated