我有一个递归函数,它使用Notes对象。请告诉我是否应该为这些对象调用recycle方法,或者我可以将它留给垃圾收集器?
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);
}
}
答案 0 :(得分:4)
简而言之:回收再循环,回收!
您必须在不再需要时立即回收所有Domino对象。 而且你必须要小心:如果你错过了一个实例,那么在你的代码中发现回收问题是非常可怕的。
在上面的代码中,当抛出错误时,NotesDocumentCollection ndcResp 不会被回收,并且您的服务器迟早会遇到分配问题。
您应该使用 finally 语句并回收函数中使用的所有对象,这样即使方法中的某些内容出错,它们也会被清理。