« 前回の新規ヌルオブジェクトをポイントやポリゴンに追加配置するユーザスクリプトを統合する | トップページ | 前回の新規ヌルオブジェクトをポイントやポリゴンに追加配置するユーザスクリプトに「オブジェクトモード」を追加する »

C4D BasePointのGetPoint()/SetPoint()の簡単なスピードテスト

BasePointの簡単なスピードテスト。
簡単すぎで、あまり参考にはなりませんでした。

SetPoint(number , pos)/SetPoints(pts)
GetPoint(number)/GetPoints()
GetPointCount()

立方体を適当に細分化(確か6)してポイント数を増やし、ポイント数24578個のポリゴンオブジェクト。

Speedtest_01

このオブジェクトに、次のスクリプトを実行しました。

/*
スピードテスト
2009.5.25
*/


main(doc , op)
{

  var
tm;
  var pts;
  var i;
  var ptc = op->GetPointCount();
  var pos;
  var j;


  //-------- GetPoints()
  tm = time();
  for(j = 0 ; j < 10 ; j++){
    pts = op->GetPoints();
  }
  println("GetPoints() " , time() - tm);


  //-------- GetPoint()
  tm = time();
  for(j = 0 ; j < 10 ; j++){
    for(i = 0 ; i < ptc ; i++){
      pos = op->GetPoint(i);
    }
  }
  println("GetPoint() " , time() - tm);


  //-------- SetPoints()
  tm = time();
  for(j = 0 ; j < 10 ; j++){
    op->SetPoints(pts);
  }
  println("SetPoints() " , time() - tm);


  //-------- SetPoint()
  tm = time();
  for(j = 0 ; j < 10 ; j++){
    for(i = 0 ; i < ptc ; i++){
      op->SetPoint(i , pts[i]);
    }
  }
  println("SetPoint() " , time() - tm);
}

単位:ミリ秒 1 2 3 4 5 6 7 8 9 10 平均
GetPoints() 8 8 7 8 7 9 7 8 7 8 7.7
GetPoint(number) 107 107 107 108 109 107 111 111 109 109 108.5
SetPoints(pts) 6 5 5 5 5 5 5 6 5 5 5.2
SetPoint(number , pos) 124 124 124 128 125 123 125 124 125 124 124.6

スピードテストの結果は、Get/Set両方ともポイント配列を使用したほうが10倍以上速い。
ループ内が単純なので、ベクトル計算等が加われば結果は、変わりますけどね…

もう一つGetPointCount()をテストします。

/*
ポイントをfor()を使って捜査するとき、条件式にGetPointCount()の直接使用と変数使用を比べる。
2009.5.25
*/


main(doc , op){
  var ptc = op->GetPointCount();
  var pts = op->GetPoints();
  var i , j;
  var tm;

  tm = time();
  for(j = 0 ; j < 10 ; j++){
    for(i = 0 ; i < ptc ; i++){
      pts[i] = pts[i];
    }
  }
  println(time() - tm);


  tm = time();
  for(j = 0 ; j < 10 ; j++){
    for(i = 0 ; i < op->GetPointCount() ; i++){
      pts[i] = pts[i];
    }
  }
  println(time() - tm);
}

単位:ミリ秒 1 2 3 4 5 6 7 8 9 10 平均
変数ptc 75 79 75 75 84 77 81 80 72 73 77.1
GetPointCount() 141 135 145 138 136 140 146 143 139 156 141.9

直接GetPointCount()をfor()で使用するより変数を使ったほうが2倍ほど速い。
これもループの中の処理が単純なので、複雑になれば結果は変わります。

|

« 前回の新規ヌルオブジェクトをポイントやポリゴンに追加配置するユーザスクリプトを統合する | トップページ | 前回の新規ヌルオブジェクトをポイントやポリゴンに追加配置するユーザスクリプトに「オブジェクトモード」を追加する »