# Эффективная работа с большими наборами данных в Dynamo

На этой странице представлены некоторые практические правила эффективной работы с большими наборами данных в Dynamo. Надеемся, что вы сможете использовать эти советы для выявления узких мест в своих графах, чтобы они выполнялись за считаные минуты, а не за несколько часов.

Содержание

* Создание геометрии и тесселяция
* Использование памяти
* API Revit

### Создание геометрии и тесселяция

В Dynamo создание и рисование элемента геометрии — это совершенно разные действия. Как правило, создание геометрии выполняется намного быстрее и при этом используется меньше памяти, чем при рисовании объекта. Геометрию можно рассматривать как список измерений для создания костюма, а тесселяцию — как сам костюм. По его меркам можно рассказать о костюме довольно многое: какова длина рукавов, сколько он стоит и т. д., но почти всегда нужно посмотреть и примерить готовый костюм, чтобы понять, правильно ли он сидит. Аналогичным образом для геометрии без тесселяции можно определить ее ограничивающую рамку, площадь, объем, пересечение с другой геометрией и экспортировать ее в SAT или Revit. Тем не менее, вам почти всегда придется тесселировать геометрию, чтобы понять, правильная она или нет.

Если граф Dynamo содержит много объектов и замедляется во время выполнения, можно удалить шаги тесселяции из графа, чтобы ускорить процесс.

Узлы геометрии в Dynamo всегда тесселированы\*. При этом остается два варианта работы с геометрией без тесселяции: узлы Python и узлы ZeroTouch. До тех пор, пока объект геометрии не будет возвращен из узла Python или ZeroTouch, тесселяция геометрии не выполняется. Например, если граф имеет несколько узлов точек, соединенных с несколькими узлами линий, несколькими узлами сечений и несколькими узлами толщины, тесселяция геометрии будет выполняться на каждом шаге. Вместо этого можно объединить данную логику в узел Python или ZeroTouch и возвращать из этого узла только конечный объект.

Дополнительные сведения об использовании узлов ZeroTouch см. в разделе [Разработка для Dynamo](https://github.com/DynamoDS/DynamoPrimerNew/blob/master-rus/9_best_practices/11_developer_primer/3_developing_for_dynamo/README.md) данного руководства.

### Использование памяти

Если тесселяция геометрии больше не выполняется, могут возникнуть проблемы с памятью из-за избыточного накопления геометрии. Геометрические объекты в Dynamo занимают небольшое, но не малое количество памяти при создании. При работе с сотнями тысяч или миллионами объектов объем использования может расти, что неизменно приводит к аварийному завершению работы Dynamo или Revit. В Dynamo версии 2.5 или более поздней это происходит неявным образом путем удаления неиспользуемых объектов, но если используется версия, предшествующая версии 2.5, один из способов избежать создания большого количества геометрии — удалить объекты по завершении работы. Предположим, что создаются сотни тысяч объектов NurbsCurve, для каждого из которых требуются десятки точек. Один из способов их создания — создать в Dynamo двумерный список и передать его узлу NurbsCurve.ByPoints. Однако для этого нужно создать миллионы точек. Еще один способ — использовать узел Python или ZeroTouch. В этом узле можно создать десяток точек, передать их в узел NurbsCurve.ByPoints, а затем удалить десяток точек с помощью вызова метода .Dispose(). Дополнительные сведения об использовании узлов ZeroTouch см. в разделе [Разработка для Dynamo](https://github.com/DynamoDS/DynamoPrimerNew/blob/master-rus/9_best_practices/11_developer_primer/3_developing_for_dynamo/README.md) данного руководства. Удаление объектов геометрии после их создания может значительно сократить объем используемой памяти в определенных обстоятельствах. Хотя данная проблема решена для пользователей Dynamo 2.5 или более поздней версии, рекомендуется по-прежнему удалять геометрию явным образом, если при использовании требуется сократить объем памяти в определенный момент времени. Дополнительные сведения о новых функциях обеспечения стабильности, появившихся в Dynamo 2.5, см. в разделе [Повышение стабильности геометрии в Dynamo](https://forum.dynamobim.com/t/dynamo-geometry-stability-improvements-request-for-feedback/39297).

### API Revit

Если вы активно удаляете объекты в узле ZeroTouch или Python и по-прежнему испытываете проблемы с памятью или производительностью, возможно, потребуется полностью исключить из процесса Dynamo и создать объекты Revit непосредственно с помощью API. Например, можно выполнить синтаксический разбор файла Excel для получения информации о точках, а затем использовать эту информацию для создания координат XYZ и других элементов Revit с помощью соответствующего API. На этом этапе Revit станет единственным узким местом, которого невозможно избежать.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://primer2.dynamobim.org/ru/9_best_practices/5-efficiently-working-with-large-datasets.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
