今天測出一個奇怪的事情:對Notes新增一筆A,再修改A沒問題,然後再刪除A就丟出NotesException,而Error Message竟是一堆問號。反觀如果Notes本來就有B這筆資料,先新增A再刪除B或先刪B再增A就沒有問題。所以矛頭就指向了Session,使用Lotus Script操作Notes,其物件階層是Session==>Database==>Document,每個物件都有recycle的method,在API定義是寫道:無條件歸還記憶體給系統。在對Notes做createDocument後,執行Document、Database的recycle再remove都還是丟出NotesException,直到執行Session的recycle後再執行remove就正常work,而且Session被recycle後毋須再createSession,可以同一份instance繼續使用。
相對於上次提到逐筆取得Document再進行remove,今天發現有批次刪除的方式,看來會更有效能:
DocumentCollection dc = this.notesDB.search(cond); |
根據Database物件依cond條件search到DocumentCollection後,可以直接對DocumentCollection進行remove(true)就可以完全清除。而Boolean參數為true,應是直接從.NSF檔刪除這些Document,false則只是標記為刪除,但並沒有真的刪除。