8

MemoryCacheMVC .Net アプリケーションにキーと値のペアを格納するために使用しています。

私が使用している主な目的は2つありますMemoryCache。1 つはユーザー ID のセッションを格納することで、もう 1 つは定数を格納することです (これは単なる例です)。キーは理論的にはどちらの場合も同じである可能性があるため、これら 2 を分離する何らかの方法が必要です。

2つか3つの方法を考えています。どの方法が優れていますか?または、より良い代替手段はありますか?

  1. キャッシュ内の各キーには、名前空間が先頭に追加されます。

    "user_session:1"、"user_session:2"
    、"constants:1"、"constants:2"

  2. ネストされた辞書をキーとして使用します。

    ID をセッション オブジェクトにマップするディクショナリを値とするキー「user_sessions」があります。値がディクショナリになるキー「定数」があります。

  3. 各「名前空間」は、独自の MemoryCache インスタンスを取得します。

#2 の欠点は、ユーザー ID に属する値を取得する場合、まず辞書を取得し、次にその辞書のキーの値を取得する必要があることです。つまり、辞書をメモリに保存する必要があります。

いいえ:

Dictionary<string, string> userSessions = MemoryCache.Default["user_sessions"]
object session = userSessions.get("1");
4

2 に答える 2

6

オプション#3に行きましょう!

  • プログラマーにとっては、アクセスが簡単です。
  • これは最速のソリューションです (他のソリューションに関するコメントを参照してください)。
  • これは最もメモリ効率の高いソリューションです (他のソリューションに関するコメントを参照してください)。

オプション #2:

  • あなたはそれを自分で言いました。
  • キャッシュがキーを削除することを決定した場合、辞書全体が削除されるため、値のリロードがさらに発生します。

オプション1:

  • 文字列を連結する必要はありません(パフォーマンスとメモリ)
  • キー名が長いほど、比較時間が長くなります。
  • 2 倍のキーが含まれているため、アイテムの追加は遅くなります。
于 2013-05-01T18:16:41.790 に答える
1

実際の実装が何であるかはわかりませんが、MVC フレームワークでこのようにセッションを使用する場合は注意してください。ユーザー識別子は Cookie に残した方がよいでしょう。いずれにせよ、このルートを使用する用途も時々見られます。

そのようにキャッシュで辞書を使用することは避けます。あなたが見ているメモリ割り当てのタイプはわかりませんが、サーバーのトラフィックが多く、複数の辞書がある場合、非常に見苦しくなります。上記のコメントで述べたように、辞書の同時実行の問題についても同様に心配する必要があります。

あなたが提供したオプションからのより良いアプローチは、各名前空間にキャッシュの独自のインスタンスを与えることです。

于 2013-05-01T18:21:22.243 に答える