<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />データベースへの保存が遅すぎる (1 分間に 10,000 レコード)から返信がありますムシャープJMP 13 で予定されているパフォーマンスの強化を思い出しました (Thanks Jeff Polzin!)。
Msharp は、データベースの更新機能は他の手法よりも高速であると述べていますが、それでも優れているとは言えません。(そして見てくださいブライアン・ブーン元の質問への回答も... JMP 13のもう1つのパフォーマンス強化です。)スクリプト(JSLとSQLを使用する賢い方法です)を調べたところ、次のようにリストの最後に項目が追加されていることがわかりました。
//ビルドフォワード
forwardList = {};
starttime = Tick Seconds();
For( i = 0, i < 30000, i++,
Insert Into( forwardList, i )
);
stoptime = Tick Seconds();
Show(停止時間 - 開始時間);
停止時間 - 開始時間 = 1.68333333334886; // JMP 12 時間
JMP 12以前では非常に遅いです。リストは最初のアイテムによって内部的に保持され、リストの長さをたどって最後のアイテムを発見する必要があります。InsertInto() は、デフォルトでリストの最後に追加します。 これにより、N^2 のパフォーマンスが得られます。リストの長さを 2 倍にすると、時間は 4 倍になります。それを回避する方法があります:
//ビルドリバース
逆リスト = {};
starttime = Tick Seconds();
For( i = 0, i < 30000, i++,
Insert Into( reverseList, i, 1 )
);
reverseList = 逆( reverseList );
stoptime = Tick Seconds();
Show(停止時間 - 開始時間);
停止時間 - 開始時間 = 0.0333333334419876;
そのほうがいいです。insertinto() 関数は、リストの先頭に挿入するために 1 の 3 番目の引数で呼び出されます。報告された時間には、reverse() 関数の呼び出しも含まれていることに注意してください。そして答えは同じです:
表示 (reverseList == forwardList);
reverseList == forwardList = 1; // 良い、どちらの方法でも同じ答え
JMP 13を楽しみにしていますか?ここにあります:
//ビルドフォワード
forwardList = {};
starttime = Tick Seconds();
For( i = 0, i < 30000, i++,
Insert Into( forwardList, i )
);
stoptime = Tick Seconds();
Show(停止時間 - 開始時間);
停止時間 - 開始時間 = 0.0166666668374091; // ジェフはすごい!
簡単に言うと、100 を超えるアイテムのリストを作成する JMP 12 スクリプトがある場合は、先頭に挿入してから反転します。JMP 13 はいずれにしても高速です。