在条目集合中循环时的java性能
我有一个非常神秘的效果:
在我的Xpage中,我有一个小javabean,在其中我循环遍历一个条目集合,使用getallentriesbykey(username)构建(得到大约200个条目)
viewA有2个排序列:用户名+客户ID
viewB有两个排序列:用户名+交货周数(文本)
使用viewA,循环所需时间不到1秒, 但是使用viewB,循环需要超过10秒! (对我来说)真正疯狂的是:当我将customerID列放在viewB中的weeknumber后面,并对其进行排序时,循环又快了
ViewEntryCollection mycoll = myview.getAllEntriesByKey(myuser);
myentry = mycoll.getFirstEntry();
System.out.println("Start loop");
while (myentry != null) {
/* of course I do sth here, but the effect is the same
with nothing in, like in this example*/
tmpentry = mycoll.getNextEntry();
myentry.recycle();
myentry = tmpentry;
// tmpentry.recycle();
}
System.out.println("End loop");
我真的很困惑。。。也许有人能带点光来? 提前谢谢你,Uwe
更新:
它保持神秘:
我的观点。getAllEntriesByKey(myuser,key1)给了我200个条目——循环速度相当快。 我的观点。getAllEntriesByKey(myuser,key2)只给了我50个条目——循环需要6倍的时间
数据库有20000个文档,所有文档都带有读卡器字段。因此(我不熟悉xpages,而不熟悉lotusnotes…;-))我首先通过“myuser”收集它们,所有视图的第一个排序列中都有多值reader项。据我所知,这些集合只包含允许用户查看的文档。所以我看不出(myuser,key1)和(myuser,key2)集合之间的区别
# 1 楼答案
可以改用ViewNavigator类吗?它们在迭代性能方面得到了更好的优化,并且尽可能由XPages dominoView数据源和picker数据提供者使用
我还没有对ViewEntry导航性能进行测试,所以我不确定什么是快速/不快速。正如大卫所说,我认为你的观点会产生影响。可能在从ViewEntry获取值之前和之后添加计时器。它听起来像是视图有一个排序列值的索引,用于第一个循环;但第二个循环实际上需要使用getColumnValues()。这只是一个假设,我不知道它的合理性