當您回收文檔時,所有文檔的項目對象也會自動回收。你不需要明確地回收這些。
如果您需要通過當前文檔中的很多項目進行迭代,比如數千個項目,您將不得不手動回收項目。因爲這可能不是你不需要的情況。
對於每個請求,至少有18,000個Domino對象句柄(版本8.5 - 甚至更高版本9.0)。如果你可以接近這個數字,然後回收。如果不是不用擔心。
更新
我做了關於處理和回收利用一些實驗研究。下面是我的結果:
- 沒有數使用Domino對象(句柄)的無服務器之前回收墜毀限位但在內存中的內部對象緩存
- Domino對象佔用不同數量的高速緩存內存根據類型
- 50萬的項目可以在緩存服務器與一個名字崩潰
- 約300,000項前長於23字符處理
- 約400,000物品DateTime類型
- 約9500000與session.createDateTime(日期)創建日期時間對象與session.createDateTime(字符串)創建
- 約258100000 datetime對象
- 多米諾8.5.3和9.0。 1個服務器準確顯示了同樣的結果
- HTTP請求在同一時間運行得份額處理內存
- HTTP請求的請求,結束回收所有使用的對象
個
- datetime對象不使用對象緩存,如果它們與session.createDateTime(日曆)
- datetime對象得到回收完全當父文檔得到回收,如果他們得到了來自項目
DateTime dateTime = item.getDateTimeValue()
我使用的Java創建實例由XPage調用的代碼用於我的實驗。
這是它的一個變化:
的Java
package de.leonso.test;
import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.NotesException;
import com.ibm.xsp.model.domino.DominoUtils;
public class Crasher {
public static void crash() throws NotesException {
Database database = DominoUtils.getCurrentDatabase();
for (long docNumber = 1; docNumber <= 100000; docNumber++) {
Document doc = database.createDocument();
doc.replaceItemValue("Number", Long.valueOf(docNumber));
for (int itemNumber = 3; itemNumber <= 1000; itemNumber++) {
doc.replaceItemValue("Item" + itemNumber, itemNumber);
}
System.out.println(docNumber);
doc.save();
}
}
}
的XPage
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:text
escape="true"
id="computedField1">
<xp:this.value><![CDATA[#{javascript:
de.leonso.test.Crasher.crash();
"finished"
}]]></xp:this.value>
</xp:text>
</xp:view>
此代碼創建服務器崩潰前492個文件。此時至少有492,000個Domino對象處理正在使用中。
除了Knut的答案之外,如果您從文檔中獲得任何NotesDateTime對象,那麼這些對象不會與文檔一起回收,因爲它們是NotesSession的子項而非Doc。如果迭代NotesViewEntries,則是相同的概念。所以NotesDateTime需要有意識地回收。否則他們將開始填寫您的處理配額(但它們將在請求結束時與會話一起回收) –
請您爲每個請求語句備份18k句柄嗎?我知道整個服務器的C API的10k內部限制,而不是請求。因此,大量使用HTTP(比方說100個活動線程)可能會在一個循環中只有100個句柄而無需回收。 –
@Cameron:在我的測試中我找不到證據表明DateTime值會造成特殊的回收麻煩。我還沒有測試ViewEntries。 –