5

昨夜IHttpModule、リクエスト処理を行うための最初の記事を書きました。正規表現を使用して生の URL を検査しています。はIHttpModuleすべてのリクエストで呼び出されるため、正規表現オブジェクトの何らかのキャッシュを実行して、すべてのリクエストでオブジェクトが作成されないようにするのが妥当と思われます。

今私の質問...どちらが良いですか:HttpContext.Current.Cacheインスタンス化されたオブジェクトを保存するために使用するprivate static Regexか、モジュールで使用するために使用しますか?

理由が楽しみです。明確にするために、正規表現は決して変わらないため、常に同じものになります。

4

3 に答える 3

11

正規表現が変更されない場合 (通常は変更されません)、次のようになります。

private static readonly Regex pattern = new Regex("...", RegexOptions.Compiled);

あらゆる点で最速かつ最も効率的です

于 2011-03-28T21:27:09.530 に答える
3

私は原則として静的フィールドを使用し、オブジェクトの有効期間をより詳細に制御する必要がある場合に備えてキャッシュを保存します。すぐに思いつく理由は次の 2 つです。

  • オブジェクトのキャッシュとキャッシュからの取得には、常にいくらかのオーバーヘッドが伴います。少なくとも、ボックス化/ボックス化解除が発生します。
  • コードで直接アクセスするのではなく、キャッシュ キーを使用してアイテムにアクセスする必要があります。これにより、アプリケーションが多少大きくなり、理解しにくくなります。

オブジェクトをキャッシュすることによって得られる機能、つまりライフタイムが必要かどうかを自問する必要があります。

于 2011-03-28T21:39:17.817 に答える
3

依存していると思います。ビルトイン キャッシュは自動有効期限制御を提供できますが、静的オブジェクトは提供できません。また、キャッシュ メカニズムを変更したい場合 (アプリケーションを配布する必要があるとしましょう) は、組み込みのキャッシュを使用して変更できます。静的オブジェクトはまさに静的です。

于 2011-03-28T21:28:23.903 に答える