在 Dynamo 中有效率地處理大型資料集
本頁將向您介紹一些在 Dynamo 中有效率處理大型資料集的經驗法則。希望您可以使用這些技巧來識別圖表中的瓶頸,讓您的圖表在短時間就能執行完成。
內容:
幾何圖形產生與鑲嵌
記憶體使用
Revit API
幾何圖形產生與鑲嵌
在 Dynamo 中,建立幾何圖形和繪製幾何圖形是兩種完全不同的事件。一般而言,建立幾何圖形比繪製物件要快得多,使用的記憶體也較少。您可以將幾何圖形想像成是製作一套西裝的尺寸清單,而鑲嵌是西裝本身。您可以從西裝尺寸得知很多關於這套西裝的資訊:手臂有多長,要花多少錢等等,但總是要看一看並試穿成品,才知道是否合適。同樣地,使用未鑲嵌的幾何圖形,您可以決定其邊界框、面積、體積;與其他幾何圖形相交;以及將其匯出為 SAT 或 Revit。但是,您還是必須鑲嵌幾何圖形,才能感覺它是否正確。
如果您的 Dynamo 圖表有許多物件,而且在執行過程中變慢,可以從圖表中移除鑲嵌步驟來加快速度。
Dynamo 中的幾何圖形節點永遠是經過鑲嵌的*。您有兩個選項來處理未鑲嵌的幾何圖形:Python 節點和 ZeroTouch 節點。只要您沒有從 Python 或 ZeroTouch 節點傳回物件幾何圖形,就不會鑲嵌幾何圖形。舉例來說,如果您的圖表有幾個點節點、連接到幾個線節點、連接至幾個斷面混成節點、連接到幾個增厚節點,幾何圖形在每一步都會進行鑲嵌。您可以改為將此邏輯綁定到 Python 或 ZeroTouch 節點,只傳回節點中的最終物件。
如需使用 ZeroTouch 節點的更多資訊,請參閱本 Primer 的為 Dynamo 開發一節。
記憶體使用
如果您不再鑲嵌幾何圖形,則可能會因為累積過多幾何圖形而遇到記憶體瓶頸。Dynamo 中的幾何圖形物件在建立時會消耗少量但並非可忽視不計的記憶體。如果您處理的是數十萬或數百萬個物件,這加總起來可能會導致 Dynamo 或 Revit 當機。在 Dynamo 2.5 版及更高版本中會透過處置未使用的物件來隱性處理,但如果使用 2.5 之前的版本,則避免建立大量幾何圖形的一種方法,是在用完物件後就加以處置。舉例來說,假設您要建立幾十萬條 NurbsCurve,每條都需要幾十個點。建立這些曲線的一種方式是在 Dynamo 中建立一個二維清單,並提供給 NurbsCurve.ByPoints 節點。但是這要建立幾百萬個點。另一種方法是使用 Python 或 ZeroTouch 節點。在這類節點中,您可以建立十幾個點,將這些點提供給 NurbsCurve.ByPoints,然後使用 .Dispose() 方法呼叫來處置這十幾個點。如需使用 ZeroTouch 節點的更多資訊,請參閱本 Primer 的為 Dynamo 開發一節。建立幾何圖形物件後加以處置,在某些情況下可以顯著減少您使用的記憶體量,雖然我們會在 Dynamo 2.5 及更高版本中為使用者處理這個問題,但如果使用案例需要在明確的時間點減少記憶體用量,我們建議使用者仍需明確處置幾何圖形。請參閱 Dynamo 幾何圖形穩定性的改進,以進一步瞭解 Dynamo 2.5 中引入的新穩定性功能。
Revit API
如果您積極處置 ZeroTouch 或 Python 節點中的物件,但仍遇到記憶體或效能問題,請完全不要考慮 Dynamo,直接透過 API 建立 Revit 物件。例如,您可以剖析 Excel 檔案中的點資訊,然後使用此資訊透過其 API 建立 XYZ 和其他 Revit 元素。此時,Revit 就會成為無法避免的最終瓶頸。
Last updated