5

イベントへのサブスクライブ/サブスクライブ解除に関する同じベスト プラクティス ルールが asp.net に適用されますか?

ばかげた質問のように思えるかもしれませんが、考えてみると、人々が最初にページのイベントにサブスクライブし、後で Web リクエストでサブスクライブを解除するコードを見たことがありません。

例 1: ページの Page_Load メソッドで、ListView の更新イベントをサブスクライブします。OnPreRenderComplete メソッドなどで、後でそのイベントのサブスクライブを解除する必要がありますか?

例 2: パッシブ ビュー パターンでは、ビュー (ページ コントロール/ユーザー コントロール) は、プレゼンターが何かをする必要があるときはいつでもイベントを発生させます。プレゼンターはビューのイベントをサブスクライブする必要がありますが、イベントのサブスクライブを再度解除する必要もありますか?

よろしく、エギル。

4

2 に答える 2

4

ページインスタンスとそのすべてのコンポーネントは、リクエストが完了すると「スコープ外」になります。たとえば、GCの対象になります。そのため、ListViewは、その上のページ/ユーザーコントロールとともにスコープ外になります。サブスクライブを解除する必要はありません(たとえば、すべてのリクエストを存続させ、ページのメソッドの1つをイベントハンドラーとして使用する、ある種のシングルトンに属するイベントをサブスクライブしない限り)。

同じことがプレゼンターにも当てはまります(このプレゼンターが1ページだけで使用され、その後範囲外になる限り)。

于 2008-12-05T21:22:17.590 に答える
2

一般的にはありません。ページがアンロードされると、イベントは自動的にダンプされることになっています。察するに。以前(.NET 1.1で)バグに遭遇したことがありますが、そうではありませんでした。

ページに問題があることに気付かない限り、購読を解除する必要はありません(たとえば、呼び出しスタックのファントムからメソッドが20回呼び出される場合、これは通常、何かが正しく購読解除されていないことを示しています)。

于 2008-12-05T21:07:48.400 に答える