Pet*_*ter 9 xpages xpages-ssjs
我已经阅读了关于Domino对象回收的这个建议: 在Java Bean中回收Domino对象的最佳方法是什么
如果我有一个名为document的数据源并且在一个多次调用的函数中存在这个代码,那么最佳做法是什么:
var doc=document.getDocument(true)
Run Code Online (Sandbox Code Playgroud)
并在后端文档中执行操作.
在我退出该功能之前,我应该回收doc还是我的后端文档到数据源再循环呢?
Tim*_*ony 13
这是一个很好的问题,因为这是"回收一切"原则的唯一例外之一(另外两个值得注意的例子是你永远不应该回收当前的会话或数据库).回收数据源的后端文档是一个坏主意,因为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")
.
归档时间: |
|
查看次数: |
903 次 |
最近记录: |