从传统的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;
}
}
当首次使用它时,例如重复,将为每个文档创建数据库和视图对象。这是最佳实践还是有更好的解决方法?
我知道我们可以在第一次使用Map时将所有项目都放在Map中,但也不确定这是否是关于内存的最佳实践?
答案 0 :(得分:0)
在重复控制中使用它(例如30次)时,使用30x @DBLookup。这看起来效率不高。您可以做什么:使用视图导航器快速读取所有具有id和unid的项目到地图中。然后,不是执行@DBLookup而是从地图获取UNID并执行getDocumentByUNID来加载它。那应该更快。 另一种变化 - 如果您的项目数据不是太大:将JSON表示保存到字段中并将其放入视图导航器中。这样你只需要阅读一个视图(同样你有两个顺序读取或搜索它的变体)和一个字段。
如果我需要进一步澄清,请告诉我