# Dynamo で大規模なデータ セットを効率的に操作する

このページでは、Dynamo で大規模なデータセットを効率的に操作するための経験則について説明します。ヒントを参考にすると、グラフのボトルネックを特定し、グラフが時間単位ではなく分単位で実行されるようにすることもできます。

目次:

* ジオメトリの生成とテッセレーションの比較
* メモリ使用量
* Revit API

### ジオメトリの生成とテッセレーションの比較

Dynamo では、ジオメトリの作成と描画は、2 つのまったく異なるイベントです。一般に、ジオメトリの作成は、オブジェクトの描画よりもはるかに高速で、メモリの消費量も少なくなります。ジオメトリはスーツを作成する際の寸法一覧で、テッセレーションはスーツそれ自体と考えることができます。スーツの寸法からは、腕の長さや費用などかなり多くのことがわかりますが、ほとんどの場合は、完成したスーツを見て試着し、結果が正しいかどうかを確認する必要があります。同様に、テッセレーションを実行していないジオメトリの場合、境界ボックス、面積、体積を決定し、他のジオメトリと交差させ、SAT や Revit に書き出すことができます。ただし、ほとんどの場合、ジオメトリをテッセレーションして、結果が正しいかどうかを確認する必要があります。

Dynamo グラフに多数のオブジェクトがあり、実行中に速度が低下する場合は、グラフからテッセレーション手順を削除して処理速度を上げることができます。

Dynamo のジオメトリ ノードは常にテッセレーションされます\*。そのため、テッセレーションされていないジオメトリを操作するには、Python ノードと ZeroTouch ノードの 2 つのオプションを使用することになります。Python または ZeroTouch ノードからジオメトリ オブジェクトを返さない限り、ジオメトリはテッセレーションされません。たとえば、グラフに複数の点ノード、複数の線分ノード、複数のロフト ノード、複数の厚みノードが接続されている場合、ジオメトリは各ステップでテッセレーションされます。その代わりに、このロジックを Python または ZeroTouch ノードにバンドルして、ノードから最後のオブジェクトのみを返すことができます。

ZeroTouch ノードの使用の詳細については、この手引書の「[Dynamo 向けの開発](https://github.com/DynamoDS/DynamoPrimerNew/blob/master-jpn/9_best_practices/11_developer_primer/3_developing_for_dynamo/README.md)」セクションを参照してください。

### メモリ消費量

ジオメトリをテッセレーションしない場合、余分なジオメトリの蓄積によってメモリのボトルネックが発生する可能性があります。Dynamo のジオメトリ オブジェクト作成時のメモリ消費量は多くはありませんが、少ないわけでもありません。数十万または数百万のオブジェクトを操作している場合、これらが積み重なり、Dynamo や Revit がクラッシュする可能性があります。Dynamo バージョン 2.5 以降では、これは未使用のオブジェクトを破棄することによって暗黙的に処理されますが、2.5 より前のバージョンを使用している場合は、大量のジオメトリを作成しないようにする 1 つの方法として、処理完了時にオブジェクトを破棄するという方法があります。たとえば、それぞれに何十もの Point を必要とする NURBS 曲線を何十万も作成するとします。作成する方法の 1 つに、Dynamo で 2 次元のリストを作成し、NurbsCurve.ByPoints ノードに入力するというものがあります。ただし、そのためには数百万の Point を作成する必要があります。もう 1 つの方法は、Python または ZeroTouch ノードを使用することです。このノードでは、数十個の点を作成して NurbsCurve.ByPoints ノードに入力し、その点を .Dispose() メソッド呼び出しで破棄できます。ZeroTouch ノードの使用の詳細については、この手引書の「[Dynamo 向けの開発](https://github.com/DynamoDS/DynamoPrimerNew/blob/master-jpn/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)」を参照してください

### Revit API

ZeroTouch または Python ノードで積極的にオブジェクトを破棄しても、メモリやパフォーマンスの問題が解決しない場合は、Dynamo を完全にバイパスし、API を使用して Revit オブジェクトを直接作成しなければならない場合があります。たとえば、Excel ファイルで点の情報を解析し、この情報を使用して API で XYZ 座標やその他の Revit 要素を作成できます。この場合は、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/ja/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.
