我是否必须在重复函数中使用回收 Notes 对象?

Do I have to use recycle Notes objects in recurrence functions?

我有一个递归函数,它使用 Notes 对象。请告诉我是否应该为这些对象调用回收方法,或者我可以将其留给垃圾收集器?

function getAllUsersInDepartmentAndSub (nd: NotesDocument, arrData: Array) {
  var strSubPrefix = strTaskLibName + "getAllUsersInDepartmentAndSub/";
  try {
    var ndcResp: NotesDocumentCollection;
    var ndResp: NotesDocument;
    var ndNext: NotesDocument;
    var strTemp: string;

    if (nd) {
        ndcResp = nd.getResponses();
        if (ndcResp) {
            if (ndcResp.getCount() > 0) {
                ndResp = ndcResp.getFirstDocument();
                while (ndResp) {
                    strTemp = @LowerCase(ndResp.getItemValueString("form")); 
                    if (strTemp == "department") {
                        getAllUsersInDepartmentAndSub (ndResp, arrData);
                    } else if (strTemp == "person") {
                        strTemp = ndResp.getItemValueString("fullname");
                        if (@Member(strTemp, arrData) <= 0) {
                            arrData.push(strTemp);                          
                        }
                    }
                    ndNext = ndcResp.getNextDocument(ndResp);
                    ndResp.recycle();
                    ndResp = ndNext;
                }
            }
            ndcResp.recycle();
        }
    }
  } catch(e) {
    writeInfo(strSubPrefix, e, true, true);
  }
}

简而言之:循环再循环,再循环!

您必须在不再需要所有 Domino 对象时立即回收它们。 而且你必须小心:如果你错过了一个实例,那么在你的代码中发现回收问题是很可怕的。

在你上面的代码中,你的 NotesDocumentCollection ndcResp 在抛出错误时没有被回收,你的服务器迟早会遇到分配问题。

您应该使用 finally 语句并回收函数中使用的所有对象,这样即使您的方法中出现问题,它们也会被清理。