xpages – XPage Java对象在SSJS中的回收

我已经阅读了关于Domino对象回收的建议:
What is the best way to recycle Domino objects in Java Beans

如果我有一个名为document的数据源,并且这个代码存在的函数调用了几次,那么最好的做法是什么?

var doc=document.getDocument(true)

并做后台文件的东西.

在我退出函数之前,我应该回收doc还是将我的后端文档转发到数据源中?

解决方法

这是一个很好的问题,因为这是“循环利用”原则的唯一例外之一(另外两个值得注意的例子是您不应该回收当前会话或数据库).对于数据源的后端文档进行回收是一个坏主意,因为JSF生命周期具有相同的句柄,您将从Domino中回收.数据源为我们照顾,所以不需要手动回收.另一方面,如果您获取特定项目(即doc.getFirstItem(“someFieldName”)或作为日期的项目值的句柄,则应该回收这些对象,而不是文档本身.

到目前为止,最重要的情况是回收Java和ssjs对象至关重要,因为每次前进到下一个条目或文档时,如果您跳过循环,则会泄漏句柄.在大多数其他情况下,回收仍然是可取的,但更接近于可选的,因为其他操作需要很长时间才能泄漏出来,造成问题.但是,如果您正在迭代一个非常大的视图,那么如果忘记回收,您可以轻松地在单个迭代中运行句柄.

然而,一个分开的想法:我很少看到一个情况,即在数据源的后端文档中获取句柄是最好的方法,所以我建议重新访问你的代码,以确保甚至有必要获取这个句柄开始.例如,而不是document.getDocument(true).getItemValueString(“someFieldName”),只需调用document.getValue(“someFieldName”)即可.返回的值应该是相同的,但是它会运行得更有效率,而你不会碰到后端文档,所以回收不是一个问题.而且每个项目访问的打字都较少,这肯定会随着时间的推移而增加.同样,代替document.getDocument(true).replaceItemValue(“someFieldName”,“newValue”),替换document.setValue(“someFieldName”,“newValue”).

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...