6

ページの 1 つにユーザー コントロールがあり、このページで以下のエラーが発生しています

Object reference not set to an instance of an object.

この問題は非常に簡単に解決できましたが、このエラーのスタック トレースに奇妙な点が見つかりました。

スタックトレースを確認すると以下のようになっていました

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)

これは完全なスタック トレースではなく、その一部です。この関数「System.Web.UI.Control.LoadRecursive()」の役割を知りたいです。これは 11 回呼び出され、アプリケーションでパフォーマンスの問題が発生するのではないかと心配しています。ユーザーコントロールを使用しているため、この関数が呼び出されていると思います。この種のユーザー コントロールをアプリケーションの多くの場所で使用しています。

これについて知っている人がいたら教えてください。

4

1 に答える 1

3

LoadRecursive()現在のコントロールのメソッドを呼び出し、html にネストされたコントロールを含むすべての子コントロールをOnLoad()再帰的に呼び出します。LoadRecursive()

したがってLoadRecursive()、カスタム コントロールに到達するために渡されたすべての親コントロールに対して、スタックに 1 つの呼び出しがあります。複合コントロールは、深みを増す多くのインワンを持つことができます。

これは必ずしもパフォーマンスの問題ではありません。入れ子の深さを示すだけです。

于 2015-02-22T09:17:19.900 に答える