4

HttpHandler を作成しました。以下は Web.config の設定です。

<add verb="*" path="*.png" type="MvcApplication1.Handler2"/>

IsReusable = true in HttHandler

たとえば、アプリケーションに 20 人のユーザーがいて、次の URL を入力しようとしているとします。

http://Domainname/abc.jpg

ご存知のようIsReusable = falseに、 Response End までに HttpApplication の HandlerRecycleList が null に設定されますが、次の場合はそうではありません

IsReusable = true

質問

  1. HttpHandler メモリは、次の場合にすべてのユーザーに共通になりますIsReusable = trueか?
  2. または、上記の URL を要求したとします。このメモリは私にのみ割り当てられ、次回は私の場合に再利用され、他のユーザーにはセッションごとに HttpHandler メモリが割り当てられますか?
4

1 に答える 1

3

はい、ハンドラーはすべてのユーザーに共通です。セッションオブジェクトには関連付けられていません。

Reusable を true に設定すると、インスタンスはキャッシュされ、他のリクエストで再利用されます。新しいインスタンスを作成することなく、その ProcessRequest メソッドを何度も呼び出すだけです。ハンドラーは、これについてセッションを確認しません。アプリは、現在の負荷を処理するために必要な数のハンドラーを作成します。

したがって、20 人のユーザーが同時にアプリにアクセスしている場合、20 個のインスタンスが作成されます。一方、20 人のユーザーがハンドラーに順次アクセスしている場合、(再) 使用されるインスタンスは 1 つだけです。

作成されるインスタンスの量を制御することはできません。これはオンデマンドで行われます。

欠点は、ハンドラーで大量のメモリを使用すると、これらのインスタンスが GC サイクルに耐えられるため、メモリの使用に悪影響を与えることです。

また、processRequest の最後の状態が次のリクエストに対して有効であることを確認する必要があります。

于 2013-05-28T11:28:10.157 に答える