我的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堆大小

07-27 22:23