我有一个非常 - 对我来说 - 神秘的效果:
在我的Xpage中我有一个小java bean,我在其中循环一个条目集合,使用getallentriesbykey(用户名)构建(给我大约200个条目。
viewA有2个排序列:UserName + customerID,
viewB有2个排序列:UserName + weeknumber(text)of delivery
with viewA循环需要不到一秒钟, 但是使用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
更新
它仍然神秘:
myview.getAllEntriesByKey(myuser,key1)让我说200个条目 - 循环非常快。 myview.getAllEntriesByKey(myuser,key2)只给我50个条目 - 循环需要6倍。
db有20.000个文档,都有读者字段。因此(我是xpages的新手,而不是莲花笔记... ;-))我首先通过" myuser"收集它们,所有视图在第1个排序列中都有多值读取器项。根据我的理解,集合仅包含允许用户查看的文档。所以我没有看到beetwen(myuser,key1)和(myuser,key2)-collection的区别。
答案 0 :(得分:2)
您可以使用ViewNavigator类吗?它们针对迭代性能进行了更好的优化,并且尽可能在XPages dominoView数据源和选择器数据提供程序中使用。
我还没有对ViewEntry导航性能进行测试,所以我不确定什么是快速/不快。正如大卫所说,我认为你的观点会产生影响。也许在从ViewEntry获取值之前和之后添加计时器。它的声音就像视图中有一个已排序列值的索引,它被用于第一个循环;但它需要实际使用getColumnValues()作为第二个循环。这只是一个假设,但我不知道它的合理性。