2012-12-05 2 views
5

ho un controllo utente su una delle mia pagina e io sono sempre al di sotto errore in questa paginaSystem.Web.UI.Control.LoadRecursive() chiamato può volte nella mia controllo utente o la pagina

Object reference not set to an instance of an object. 

I ho risolto questo problema molto facilmente ma ho trovato qualcosa di strano nella traccia dello stack di questo errore.

Quando ho controllato stack trace questo era come di seguito

at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) 
at System.Web.UI.Control.OnLoad(EventArgs e) 
at System.Web.UI.Control.LoadRecursive() 
at System.Web.UI.Control.LoadRecursive() 
at System.Web.UI.Control.LoadRecursive() 
at System.Web.UI.Control.LoadRecursive() 
at System.Web.UI.Control.LoadRecursive() 
at System.Web.UI.Control.LoadRecursive() 
at System.Web.UI.Control.LoadRecursive() 
at System.Web.UI.Control.LoadRecursive() 
at System.Web.UI.Control.LoadRecursive() 
at System.Web.UI.Control.LoadRecursive() 
at System.Web.UI.Control.LoadRecursive() 
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 

Non è la stacktrace completa, ma una parte di esso. Voglio sapere qual è il ruolo di questa funzione "System.Web.UI.Control.LoadRecursive()". Si chiama 11 volte e temo che ciò possa causare problemi di prestazioni nella mia applicazione. Penso che questa funzione sia chiamata perché sto usando il controllo dell'utente. Sto usando questo tipo di controlli utente in molti punti della mia applicazione.

Per favore dimmi se qualcuno lo sa.

risposta

2

LoadRecursive() effettua una chiamata al metodo di controllo della corrente OnLoad() e poi sarà ricorsivamente chiamare LoadRecursive() su tutti i suoi controlli figlio, compresi quelli annidati nel codice HTML.

Così avrai 1 chiamata LoadRecursive() nello stack per ogni controllo genitore che è stato passato per arrivare al tuo controllo personalizzato. I controlli compositi possono avere molti in uno che aggiungono alla profondità.

Non è necessariamente un problema di prestazioni. Solo un'indicazione della profondità di annidamento.