”重い処理は C#で書くと軽くなって処理が早いのでコンポーネント実装を移植するだけの作業がある”
とくま事務所からの噂きいたので50x50x50の点オブジェクトを作る処理で実験。
grasshopperとghPythonとC#など
写真上から
grasshopper : 330ms (2%)
ghPython : 10.9s (85%)
C# : 1.2s (9%)
(grasshopperのところは他にもseriesなどのコンポーネントもあるので、もう少しかかる(ほぼゼロに近いが))
結果として、今回の作業だと、C#は、Pythonよりもはやいが、
grasshopperのコンポーネントで直接やったほうが早かった。
50x50x50 ならば コンポーネントが早いが、1万とかになると、cs が早かった。
- + + + +
以下、そーす
(追記)これは、Rhino を Python でラップされた rhinoscriptsyntax で書いているので遅い。Rhino.Geometry で書いた方がいい。ループも避けたほうがいい。
import rhinoscriptsyntax as rs a = [] for i in range(x): for j in range(x): for k in range(x): point = rs.AddPoint(i,j,k) a.append(point)
private void RunScript(int x, ref object A) { List<Point3d> pts = new List<Point3d>(); for (int i = 0; i < x; i++){ for (int j = 0; j < x; j++){ for (int k = 0; k < x; k++){ Point3d tempPt = new Point3d(i, j, k); pts.Add(tempPt); } } } A = pts; }
(さらに追記、2022)
複数の処理を書くときにコンポーネントの中でデータをハンドルし要らない中間データをコンポーネントの外に出さない(表示もしない)ようにすると、
要らないものが描画のプロセスにかからないのでかなりパフォーマンスが良くなる。
また、RhinoCommon 経由でプロパティから抜けるもの関数使わずに情報が抜けるのでそれもパフォーマンスの改善につながる。