我已经阅读了关于Domino对象回收的建议:
What is the best way to recycle Domino objects in Java Beans
What is the best way to recycle Domino objects in Java Beans
如果我有一个名为document的数据源,并且这个代码存在的函数被调用了几次,那么最好的做法是什么?
var doc=document.getDocument(true)
解决方法
这是一个很好的问题,因为这是“循环利用”原则的唯一例外之一(另外两个值得注意的例子是您不应该回收当前会话或数据库).对于数据源的后端文档进行回收是一个坏主意,因为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”).