循环访问集合时的性能

时间:2014-06-03 22:33:00

标签: java xpages

我有一个非常 - 对我来说 - 神秘的效果:

在我的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的区别。

1 个答案:

答案 0 :(得分:2)

您可以使用ViewNavigator类吗?它们针对迭代性能进行了更好的优化,并且尽可能在XPages dominoView数据源和选择器数据提供程序中使用。

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