[英]Recycling Item objects in XPages Domino Java
我有一些代码:
Document doc = view.getFirstDocument();
Item item = null;
if (null != admin.getManagers())
{
doc.replaceItemValue("Managers", admin.getManagers());
item = doc.getFirstItem("Managers");
item.setNames(true);
}
else
{
doc.replaceItemValue("Managers", "");
}
// Load the workers and set them as Names fields
if (null != admin.getWorkers())
{
doc.replaceItemValue("Workers", admin.getWorkers());
item = doc.getFirstItem("Workers");
item.setNames(true);
}
else
{
doc.replaceItemValue("Workers", "");
}
在最后一节中,我回收了文档
finally
{
if(null != doc)
{
doc.recycle();
}
}
我的问题是:我应该以同样的方式回收Item
吗? 还是因为它是Document
的孩子而被回收? 或者我应该为每个项目使用单独的变量并单独回收它们。
回收文档时,所有文档的项目对象也会自动回收。 您不需要明确地回收这些。
如果你在当前文档中迭代很多项目,那么你必须手动回收项目,比如说成千上万。 因为这可能不是你不必要的情况。
每个请求至少有18,000个Domino对象句柄(版本8.5 - 版本9.0中甚至更多)。 如果你可以接近这个数字然后回收。 如果不是不担心。
更新
我做了一些关于手柄和回收的实验研究。 这是我的结果:
DateTime dateTime = item.getDateTimeValue()
我使用XPage调用的Java代码进行实验。
这是它的一个变种:
Java的
package de.leonso.test;
import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.NotesException;
import com.ibm.xsp.model.domino.DominoUtils;
public class Crasher {
public static void crash() throws NotesException {
Database database = DominoUtils.getCurrentDatabase();
for (long docNumber = 1; docNumber <= 100000; docNumber++) {
Document doc = database.createDocument();
doc.replaceItemValue("Number", Long.valueOf(docNumber));
for (int itemNumber = 3; itemNumber <= 1000; itemNumber++) {
doc.replaceItemValue("Item" + itemNumber, itemNumber);
}
System.out.println(docNumber);
doc.save();
}
}
}
的XPage
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:text
escape="true"
id="computedField1">
<xp:this.value><![CDATA[#{javascript:
de.leonso.test.Crasher.crash();
"finished"
}]]></xp:this.value>
</xp:text>
</xp:view>
此代码在服务器崩溃之前创建492个文档。 目前,至少有492,000个Domino对象句柄正在使用中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.