我是否必须在重复函数中使用回收 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 语句并回收函数中使用的所有对象,这样即使您的方法中出现问题,它们也会被清理。
我有一个递归函数,它使用 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 语句并回收函数中使用的所有对象,这样即使您的方法中出现问题,它们也会被清理。