JMPコミュニティの皆様、こんにちは。
最近、内部 JSL スクリプトのパフォーマンスを改善する方法を検討していたところ、次のようなパフォーマンスの問題が見つかり、対処したいと思っています。
次のスクリプトを見てみましょう (macOS で実行されている JMP 17.2 PRO):
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
values = Column( dt, 1 )[dt << get rows where( Excluded( Row State() ) != 1 )];
new window("test",
lb = list box( values, nlines(10), width(100), ),
b = button box("reset", reset_lb),
);
reset_lb = expr(
lb << remove all();
lb << append(values);
Nnames = N Items(values);
for(i = 1, i <= Nnames, i++,
lb << set selected(i);
);
);いくつかのスクリプトでは、動的に更新されるリスト ボックスを使用しています。リスト ボックスの内容を変更するために、 << remove()関数と<< append()関数を使用しています。これらの関数は問題なく動作しますが、このメソッドは行数に応じてあまり拡張できないのではないかと思います。驚くほど実行速度が遅い別の部分は、<< set selected()を使用した for ループです。どうやら、これがリスト ボックス内のすべての項目を選択するために見つけた唯一のメソッドのようですが、行数に応じてひどく拡張されます。
私の質問は、パフォーマンスを低下させずにリスト ボックスのコンテンツを更新するための最もよく知られている方法があるかどうかです。次のような代替手段を探しています。
- リスト ボックスの内容を設定する最適な方法。
- リスト ボックスのすべての項目を選択するための高速な方法。
フィードバックや提案があれば、ぜひお聞かせください。