1
由GWT生成的HashMap.iterator()
和HashSet.iterator()
的JavaScript代碼非常慢。有沒有辦法加快速度?Gwt HashSet和HashMap迭代器函數非常慢
由GWT生成的HashMap.iterator()
和HashSet.iterator()
的JavaScript代碼非常慢。有沒有辦法加快速度?Gwt HashSet和HashMap迭代器函數非常慢
非常慢?你必須要更具體些。下面是總結了100000號的小例子:
final int N = 100000;
final long startInsert = System.currentTimeMillis();
final HashSet<Integer> set = new HashSet<Integer>(N);
for (int i = 0; i < N; i ++)
set.add(i);
final long stopInsert = System.currentTimeMillis();
RootPanel.get().add(new Label(
"Time to insert: " + (stopInsert - startInsert) + "ms"));
final long startIterate = System.currentTimeMillis();
final Iterator<Integer> iterator = set.iterator();
int sum = 0;
while (iterator.hasNext()) {
final Integer integer = iterator.next();
sum += integer;
}
final long stopIterate = System.currentTimeMillis();
RootPanel.get().add(new Label("Sum: " + sum +
", Time to iterate: " + (stopIterate - startIterate) + "ms"));
讓我們試試這個對酷睿雙核:
這裏是在Firefox 15(編輯模式)輸出:
Time to insert: 490ms
Sum: 4999950000, Time to iterate: 766ms
和Chrome 21 (編譯模式):
Time to insert: 130ms
Sum: 4999950000, Time to iterate: 105ms
這比開發模式慢:
的Firefox 15(開發模式):
Time to insert: 16ms
Sum: 704982704, Time to iterate: 12ms
Chrome瀏覽器21(開發模式):
Time to insert: 59ms
Sum: 704982704, Time to iterate: 10ms
但考慮,這是JavaScript的和Java,結果實際上是相當不錯的。
(順便說一句,如果有人想知道爲什麼總和相比的JavaScript(4999950000在Java中(704982704不同))......這是預期的,見https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsCompatibility#language)
我看不到的時間迭代打印。他們是慢的 –
@Erik:我建議你展示一個(簡短)代碼示例。我的意思是,如果您嘗試打印數千行(並且有許多不同的打印方式),那麼我認爲這個問題並沒有真正與迭代器調用相關。 –