Sto facendo uno sviluppo di ASP.NET in VS e ho appena trovato un piccolo suggerimento di codice interessante (penso che provengano da coderush ma potrei sbagliarmi).Perché dovrei chiamare dispose sui controlli ASP.NET?
Ogni volta che creo i controlli, mi viene indicato che dovrei usare un'istruzione "using" per loro. Sono un po 'confuso su quello che sta succedendo qui però. con l'usando il mio codice è qualcosa di simile:
using (HtmlTableRow tableRow = new HtmlTableRow())
{
tableRow.Attributes.Add("class", isOddRow ? "OddRow" : "EvenRow");
listingTable.Rows.Add(tableRow);
addCell(tableRow, row, "issueId");
addCell(tableRow, row, "Title");
addCell(tableRow, row, "Type");
addCell(tableRow, row, "Summary");
}
Quindi mi aspetto che alla fine l'istruzione using sarà chiamata smaltire sul TableRow. Tuttavia, i documenti nella libreria MSDN dicono:
Il metodo Dispose lascia il controllo in uno stato inutilizzabile. Dopo aver chiamato il metodo , è necessario rilasciare tutti i riferimenti al controllo in modo che la memoria occupata possa essere reclamata dalla procedura di garbage collection.
Quindi mi aspetto che ora ho un oggetto inutilizzabile nella mia struttura di controllo in modo che si spezzerebbe o no il rendering o qualcosa del genere. Tuttavia, tutto sembra funzionare bene.
Quindi quello che mi chiedo è perché tutti i controlli sono monouso? È solo perché alcuni di essi saranno e rendendoli tutti usa e getta significa che una chiamata a disporre al livello più alto può essere passata a tutti i controlli figlio in modo ricorsivo?
Penso che capirei se non fosse il fatto che i documenti affermano esplicitamente che lo smaltimento di un controllo lo rende inutilizzabile ... I documenti sono semplicemente sbagliati?
Come possiamo gestire gli oggetti orfani (che @Toby menzionato) se non stiamo usando il blocco "using"? – Lijo