2016-03-02 67 views
1

我有一個遞歸函數,它使用Notes對象。請告訴我是否應該爲這些對象調用回收方法,或者我可以將它留給垃圾回收器?我是否必須在循環函數中使用循環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); 
    } 
} 
+0

請至少增加一段snippet代碼。 –

+0

recycle()不執行Java垃圾回收,它釋放C對象。 Java垃圾收集器不釋放C對象,它釋放Java內存。他們一起工作 – stwissel

回答

3

總之:回收再利用,回收!

您必須在不再需要它們時立即回收所有Domino對象。 而且你必須小心:如果你錯過了一個實例,在你的代碼中找到回收問題是非常可怕的。

在上面的代碼中,當拋出錯誤時,您的NotesDocumentCollection ndcResp不會被回收,並且您的服務器遲早會遇到分配問題。

您應該使用最後語句並回收您的函數中使用的所有對象,因此即使方法中的某些內容出錯,它們也會被清除。

+0

我會補充一點:回收!回收!回收! – stwissel

+0

感謝您提供快速而翔實的回覆! –