【问题标题】:performance when looping through entry collection遍历条目集合时的性能
【发布时间】:2014-06-03 22:33:00
【问题描述】:

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

在我的 Xpage 中,我有一个小的 java bean,我在其中循环访问一个条目集合,使用 getallentriesbykey(username) 构建(获得大约 200 个条目。

viewA 有 2 个排好序的列:用户名 + 客户 ID,

viewB 有 2 个排好序的列:用户名 + 交付周数(文本)

使用 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 倍的时间。

数据库有 20.000 个文档,都带有阅读器字段。因此(我是 xpages 的新手,而不是 lotus notes ... ;-))我首先通过“myuser”收集它们,所有视图在第一个排序列中都有多值阅读器项目。据我了解,这些集合仅包含允许用户查看的文档。所以我看不出 beetwen (myuser,key1)- 和 (myuser,key2)-collection 的区别。

【问题讨论】:

  • 可能会在调用 getNextEntry 时进行某种数据库查找,查找中的不同列会根据索引等产生不同的结果。
  • 查找速度非常快,在这两种情况下,视图索引都是由排序的列构建的。视图看起来几乎相同,只是排序的列不同
  • 我想我会更多地关注视图。这个数字栏的论坛是什么?视图的选择公式是什么?你确定他们一样吗? “在继承中显示响应文档”是否相同?如果您实际上删除了坏视图并从头开始重建它会怎样?有什么区别吗?
  • 大卫,这也是我的第一个猜测,该视图是“不知何故 kaputt”。 --- 所以我新建了它:它只是“好”的副本,我改变的只是排序列:为第 2 列(客户 ID)禁用它,为第 6 列(周数)启用它。在这两种情况下,查找 (getentriesbykey) 都很快,而循环很慢。
  • 初始化视图时,最好调用setAutoUpdate(false)。否则,视图索引更新可能会意外影响性能。这是 OpenNTF Domino API 可以提供开箱即用的好处之一

标签: java xpages


【解决方案1】:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 2012-01-28
  • 2018-11-17
  • 2014-04-11
  • 1970-01-01
  • 2021-03-04
相关资源
最近更新 更多