17. Runtime の使い方
Runtime は IMyGridProgramRuntimeInfo 型の変数で、ユーザーがスクリプト中で宣言する必要はありません。Runtime は、プログラマブルブロックの現在の実行環境に関する情報を以下のプロパティから取得できます。
-
TimeSinceLastRun
このプログラムのメインメソッドが最後に実行されてから経過した時間を TimeSpan 型で返す。このプロパティはコンストラクタや Save メソッド中では有効なデータを返さない。
-
LastRunTimeMs
前回の実行でメインメソッドを実行するのに要した時間(ミリ秒)を double 型で返す。このプロパティはコンストラクタや Save メソッド中では有効なデータを返さない。
-
MaxInstructionCount
1回の run で実行できる有効な命令の最大数を int 型で返す。現在、返される値は 50,000 で固定。
-
CurrentInstructionCount
現時点での実行された有効な命令の個数を int 型で返す。
-
MaxCallChainDepth
実行可能なネストしているメソッド呼び出しの最大階層を int 型で返す。現在、返される値は 1,000 で固定。
-
CurrentCallChainDepth
現在のネストしているメソッド呼び出しの階層を int 型で返す
-
UpdateFrequency
プログラマブルブロックの Self-update (自動実行)頻度を設定する。詳細は Self-update System を参照
以下は使用例です。この DoSomethingReallyHeavy メソッド内で実行すべき処理に25,000 命令が必要である場合、実行可能な命令数の残りが25,000 未満であるとエラーが発生します。これを回避するために、実行前に実行可能な命令数をチェックし、足らなければ「処理 1」でこのメソッドから抜ける処理をして、再びこのメソッドが呼ばれるのを待ちます。一方、チェックで十分な実行可能な残り命令数があれば「処理 2」を実行します。
public void DoSomethingReallyHeavy() {
if (Runtime.MaxInstructionCount - Runtime.CurrentInstructionCount < 25000) {
//処理 1
return;
}
// 処理 2
}