httpハンドラー/モジュールを作成する場合、呼び出される-bool IsReusableを実装するインターフェースメンバーがあります。
このメンバーの意義は何ですか?これをfalse(またはtrue)に設定した場合、これは残りのWebアプリにとってどのような意味がありますか?
httpハンドラー/モジュールを作成する場合、呼び出される-bool IsReusableを実装するインターフェースメンバーがあります。
このメンバーの意義は何ですか?これをfalse(またはtrue)に設定した場合、これは残りのWebアプリにとってどのような意味がありますか?
回答:
ハンドラーの通常のエントリポイントは、ProcessRequestメソッドです。ただし、構築にコストがかかるいくつかのインスタンス値をまとめるクラスコンストラクターにコードがある場合があります。
Reusableをtrueに指定すると、アプリケーションはインスタンスをキャッシュし、その都度ProcessRequestメソッドを呼び出すだけでインスタンスを別のリクエストで再利用できます。毎回インスタンスを再構築する必要はありません。
アプリケーションは、現在の負荷を処理するために必要な数のこれらのハンドラーをインスタンス化します。
欠点は、必要なインスタンスの数が現在存在するインスタンスよりも多い場合、より多くのメモリが使用されることです。逆に、インスタンス値はGCサイクルに耐え、頻繁に再割り当てする必要がないため、見かけ上のメモリ使用量を減らすこともできます。
別の注意点は、ProcessRequest実行の最後に、オブジェクトの状態を、別のリクエストでオブジェクトを再利用する場合と同じようにする必要があることです。
AnthonyWJonesの回答に加えて、HTTPハンドラーが戻っtrue
てIsReusable
きた場合は、完全にスレッドセーフであることを確認する必要があります。
ドキュメントには、再利用可能なハンドラーを同時に再利用できないことを示すものは何もありませんが、現在のMicrosoftの実装はそれらを連続して再利用するように見えます。ただし、少なくとも理論的には、1つのハンドラインスタンスを複数のリクエストで同時に再利用できるため、他の同時スレッドによって変更される可能性のあるデータに依存しないでください。
IsReusable
スレッドセーフの要求に関するこのステートメントは、AnthonyWJonesの応答と矛盾しているようです。3番目の段落を理解すると(アプリケーションはできるだけ多くのインスタンスを作成します)、再利用可能なハンドラーインスタンスは同時に再利用されず、現在の処理が完了した後でのみ再利用されます。これに該当する場合は、スレッドセーフである必要はありません。