Java 在条目集合中循环时的性能

Java 在条目集合中循环时的性能,java,xpages,Java,Xpages,我有一个非常神秘的效果: 在我的Xpage中,我有一个小javabean,在其中我循环遍历一个条目集合,使用getallentriesbykey(username)构建(得到大约200个条目) viewA有2个排序列:用户名+客户ID viewB有两个排序列:用户名+交货周数(文本) 使用viewA,循环所需时间不到1秒, 但是使用viewB,循环需要超过10秒! (对我来说)真正疯狂的是:当我将customerID列放在viewB中的weeknumber后面,并对其进行排序时,循环又快了

我有一个非常神秘的效果:

在我的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倍的时间


db有20.000个文档,都有读卡器字段。因此(我不熟悉xpages,不是lotus notes…;-))我首先通过“myuser”收集它们,所有视图的第一个排序列中都有多值读卡器项。据我所知,这些集合只包含允许用户查看的文档。所以我看不出(myuser,key1)和(myuser,key2)集合之间的区别

可以改用ViewNavigator类吗?它们在迭代性能方面得到了更好的优化,并且尽可能由XPages dominoView数据源和picker数据提供者使用


我还没有对ViewEntry导航性能进行测试,所以我不确定什么是快速/不快速。正如大卫所说,我认为你的观点会产生影响。可能在从ViewEntry获取值之前和之后添加计时器。这听起来像是视图有一个排序列值的索引,用于第一个循环;但第二个循环实际上需要使用getColumnValues()。不过这只是一个假设,我不知道它的合理性。

可能在调用getNextEntry时进行某种数据库查找,查找中的不同列将根据索引等产生不同的结果。查找速度非常快,在这两种情况下,视图索引都是由排序的列构建的。视图看起来几乎相同,只是排序的列不同。我想我应该更关注视图。这一栏的数字是多少?视图的选择公式是什么?你确定他们是一样的吗?“在heirchary中显示响应文档”是否相同?如果您真的删除了坏视图并从头开始重新构建它呢?有什么不同吗?大卫,这也是我的第一个猜测,那就是这个观点是“莫名其妙的卡普特”——所以我构建了一个新的:它只是“好的”的一个副本,我所改变的只是排序列:对第2列(customerID)禁用它,对第6列(weeknumber)启用它。在这两种情况下,查找(getentriesbykey)都很快,但循环速度很慢。初始化视图时,最好调用setAutoUpdate(false)。否则,视图索引更新可能会意外地影响性能。这是OpenNTF Domino API可以提供的一个好处,使用ViewNavigator开箱即用肯定会更快。有关如何设置的一些提示,请参阅本文: