オブジェクト モデルでグローバル変数を使用する

 
 
 

多くの中間クラス経由でオブジェクトを取得するのは、中間クラスをグローバル変数に割り当てるよりも時間がかかる傾向があります。 たとえば、以下のステートメントは同じ結果になります。

	x = obj.Kinematics.Global.Parameters( "posx" ).Value
	y = obj.Kinematics.Global.Parameters( "posy" ).Value
	z = obj.Kinematics.Global.Parameters( "posz" ).Value

	set gk = obj.Kinematics.Global
	x = gk.Parameters( "posx" ).Value
	y = gk.Parameters( "posy" ).Value
	z = gk.Parameters( "posz" ).Value

これらのコードはどちらも同じオブジェクトの x 位置にアクセスしていますが、最初のバージョンは同じ関数を 3 回呼び出しているのに対して、2 つ目のバージョンは最初のオブジェクトを再使用しています。 処理手順を少し見てみましょう。オブジェクトの x、y、z 位置に到達するために、以下のプロパティ コールが実行されます。

  1. Kinematics (X3DObject)プロパティが Kinematics オブジェクトを返します。

  2. Global (Kinematics) * プロパティが KinematicState オブジェクトを返します。

  3. KinematicState オブジェクトから、Parameters (ProjectItem) * プロパティが ParameterCollection オブジェクトを返します。

  4. Item (ParameterCollection) * プロパティが Parameter オブジェクトを返します。

  5. Value (Parameter) * プロパティが位置を返します。

KinematicState オブジェクトへのポインタを使用すると、メモリ内で作成されたオブジェクトを参照するだけですむため、スクリプト内の 4 つのプロパティ コールを省略できます。 短いスクリプトでは、どれくらの時間を節約できたかがよくわかりませんが、多くの反復コールを置き換えると、パフォーマンスの向上を実感できます。