0

从传统的 Notes 开发中,我们了解到在脚本中检索 Domino 对象(如数据库和视图)是无效的,应该避免循环使用。

在 XPages 中,我们不能序列化 Domino 对象,而且我们经常多次检索同一个对象。我们有一个示例,我们正在根据存储在项目相关文档中的项目编号检索项目数据。bean 的作用域applicationScope是缓存,结果是缓存的。

public class Projects{ 
      private TreeMap<String, Project> projectList; 

      public Projects() { 

      } 

      public Project getProjectInfo(String projNum) { 
              Project project = null; 
              if (projectList==null) { 
                      projectList = new TreeMap<String,Project>(); 
              } 

              if (projectList.containsKey(projNum)) { 
                      project = projectList.get(projNum); 
              } else { 
                      try { 
                              Database projDb = DominoAccess.getDatabase("projects"); 
                              View v = projDb.getView("(projLookup)"); 
                              ViewEntry ve = v.getEntryByKey(projNum); 
                              if (ve != null) { 
                                      project = new Project(ve); 

                                      projectList.put(projNum, project); 
                              } 
                      } catch (Exception e) { 
                      } 
              } 

              return project; 
      } 
}

例如,当它首次用于重复时,将为每个文档创建数据库和视图对象。这是最佳实践还是有更好的方法来解决这个问题?

我知道我们可以在第一次使用时将所有项目放在地图中,但也不确定这是否是关于内存的最佳实践?

4

1 回答 1

0

当您在重复控件中使用它(例如 30 次)时,您使用 30 倍的 @DBLookup。这似乎效率不高。你可以做什么:使用视图导航器将所有具有 id 和 unid 的项目快速读取到地图中。然后,您无需执行@DBLookup,而是从地图中获取 UNID 并执行 getDocumentByUNID 来加载它。那应该更快。另一种变化 - 如果您的项目数据不是太大:将 JSON 表示保存到字段中并将其放入视图导航器中。这样,您只需要读取一个视图(同样,您有两种顺序读取或搜索它的变体)和一个字段。

让我知道是否需要进一步澄清

于 2013-04-26T06:38:06.910 回答