我的xPage具有一个重复控件,该控件使用ARRAY作为数据源。该数组从FTSearch获取值。问题在于,由于OutOfMemory异常,它会使Domino服务器崩溃。
重复:
<xp:repeat id="ssRepeat" var="rData" indexVar="rIndex" value="#{javascript:getMyDocs()}">
数据源SSJS:
function getMyDocs(){
.............
var myArr = new Array();
var dc:NotesDocumentCollection = db.FTSearch(<......>, 100);
var doc:NotesDocument = dc.getFirstDocument();
var tmpdoc:NotesDocument = null;
while (doc != null) {
var xx = doc.getItemValueString("xx");
var yy = doc.getItemValueString("yy");
var zz = doc.getItemValueString("zz");
var ww = doc.getItemValueString("ww");
myArr.push([xx, yy, zz, ww, vv]);
tmpdoc = dc.getNextDocument(doc);
doc.recycle();
doc = tmpdoc;
}
.............
dc.recycle();
return myArr;
}
您在我的代码中看到任何错误吗?这是正确的方法吗?
Note:
1. There can be multiple repeats on the page that use getMyDocs() function to find documents (based on search parameters).
2. FT index is really huge ~1Gb because the db is ~50Gb.
3. Do I recycle() everything right?
我不知道为什么Domino会丢失其内存...(v9.0.1 FP6)
最佳答案
您可以对应用程序进行许多改进。无特定顺序:
将逻辑移至JavaBean
让Bean缓存数组值,因此它在应用程序生命周期中仅执行一次
对具有所需列的视图使用FTSearch,因此可以使用ViewEntries而不是文档
仔细检查:如果退回的商品是日期时间,它也需要回收
增加服务器上的Java堆大小