2013-06-20 14 views
9

Ho letto questo suggerimento su riciclo di oggetti Domino: What is the best way to recycle Domino objects in Java BeansXPage Java Object Riciclare in SSJS

Che cosa è meglio pratica, se ho un DataSource chiamato documento e in una funzione che viene chiamata più volte questo codice esiste:

var doc=document.getDocument(true) 

e fare cose per il documento di backend.

Prima di uscire dalla funzione, devo riciclare doc oppure il mio documento di back-end è quindi riciclato sull'origine dati?

+0

La logica del riciclaggio è liberare oggetti usati. Succede automaticamente quando il thread HTTP termina con la richiesta. Essenziale è riciclare in cicli, ciò che consuma una quantità maggiore di oggetti limitati (il limite è di circa 10.000 handle per l'intero server Domino/client Notes). Quindi, puoi permetterti di non riciclare pochi documenti, a meno che non chiami il tuo codice in cicli. Attenzione agli oggetti speciali (data/ora, utente) legati alla sessione. –

risposta

13

Questa è un'ottima domanda, perché questa è una delle uniche eccezioni al principio "riciclare tutto" (altri due esempi notevoli sono che si dovrebbe mai riciclare la sessione corrente o database). È una cattiva idea riciclare il documento di back-end per un'origine dati, perché il ciclo di vita di JSF ottiene lo stesso handle e lo si riciclerebbe da Domino. La fonte dei dati si prende cura di questo per noi, quindi non è necessario riciclarlo manualmente. D'altra parte, se si ottiene una maniglia su punti specifici (cioè doc.getFirstItem("someFieldName"), o elemento valori che sono date, si dovrebbe riciclare gli oggetti, non solo il documento stesso.

Di gran lunga lo scenario più importante in cui è cruciale per riciclare gli oggetti Java e SSJS è in visualizzazione iterazione, perché ogni volta che si passa alla voce o documento successivo si perde una maniglia se si salta il riciclo. In molti altri casi, il riciclaggio è ancora consigliabile, ma più vicino all'essere facoltativo, perché ci vuole molto tempo perché le altre operazioni perdano abbastanza da causare problemi, ma se stai iterando una vista molto ampia, puoi facilmente rimanere senza maniglie in una singola iterazione se ti dimentichi di riciclare

Tuttavia, un distacco pensavo: raramente vedo una situazione in cui ottenere un handle sul documento back-end di un'origine dati è l'approccio migliore, quindi consiglio di rivisitare il codice per assicurarmi che sia addirittura necessario ottenere questo handle per iniziare . Ad esempio, invece di document.getDocument(true).getItemValueString("someFieldName"), chiama semplicemente document.getValue("someFieldName"). Il valore restituito dovrebbe essere identico, ma funzionerà in modo più efficiente e non si sta toccando il documento back-end, quindi il riciclaggio non è un problema. Ed è meno digitando per ogni accesso all'elemento, che sicuramente si aggiunge nel tempo. Allo stesso modo, invece di document.getDocument(true).replaceItemValue("someFieldName", "newValue"), sostituire document.setValue("someFieldName", "newValue").

Problemi correlati