<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />保存到數據庫太慢(每分鐘 10k 條記錄)有回复銳化這讓我想起了為 JMP 13 計劃的性能增強。(感謝 Jeff Polzin!)
Msharp 提到數據庫更新功能比另一種技術更快,但仍然不是很好。(看看布賴恩布恩也是對原始問題的回答……另一個 JMP 13 性能增強。)我查看了腳本(這是使用 JSL 和 SQL 的一種巧妙方法),看到它向列表末尾添加了項目,如下所示:
// 向前構建
轉發列表 = {};
開始時間 = Tick Seconds();
對於 ( i = 0, i < 30000, i++,
插入(forwardList,我)
);
停止時間 = Tick Seconds();
顯示(停止時間 - 開始時間);
停止時間 - 開始時間 = 1.68333333334886; // JMP 12 次
這在 JMP 12 及更早版本中確實很慢。該列表由其第一項在內部保存,最後一項必須通過遍歷列表的長度來發現。InsertInto() 默認添加到列表的末尾。 這導致 N^2 性能:列表長度加倍時間增加四倍。有一種方法可以避免它:
// 反向構建
反向列表 = {};
開始時間 = Tick Seconds();
對於 ( i = 0, i < 30000, i++,
插入(反向列表,我,1)
);
反向列表 = 反向(反向列表);
停止時間 = Tick Seconds();
顯示(停止時間 - 開始時間);
停止時間 - 開始時間 = 0.0333333334419876;
那更好。使用第三個參數 1 調用 insertinto() 函數以插入到列表的前面。請注意,對 reverse() 函數的調用也計入了報告時間。答案是一樣的:
顯示(反向列表==正向列表);
反向列表 == 前向列表 = 1; // 很好,無論哪種方式,答案都是一樣的
期待 JMP 13?這裡是:
// 向前構建
轉發列表 = {};
開始時間 = Tick Seconds();
對於 ( i = 0, i < 30000, i++,
插入(forwardList,我)
);
停止時間 = Tick Seconds();
顯示(停止時間 - 開始時間);
停止時間 - 開始時間 = 0.0166666668374091; // 傑夫太棒了!
長話短說,如果您的 JMP 12 腳本正在構建包含 100 多個左右項目的列表,請在前面插入,然後反向插入。無論哪種方式,JMP 13 都會很快。