2017-10-03 12 views
2

キャッシュに必要なJObjectがいくつかありますが、そのようなデータをキャッシュするときのベストプラクティスはCacheManagerですか?json、Bson、またはJObjectをICacheManagerにキャッシュする必要がありますか?

私は、キャッシュメモリの合理的に少量を使用して

  1. と心配です。
  2. 無駄な処理を避けるため、不必要にシリアル化しません。

jsonをキャッシュする場合string私はキャッシュを読むたびに解析する必要があります。

私がJObjectをキャッシュすると、キャッシュにどのようにシリアライズされるのかわかりません。おそらく非コンパクトバイナリ配列として。しかし、私はそれを取得した後に何もする必要はありません。

なぜ私は多分それが Bsonより良いをシリアル化することを検討しているだ、または多分それは単に直列化の別の層を追加するために起こっているの?

結局のところ、私はBsonJObjectに変換する必要があります。これはjsonをキャッシュするのと同じようにstringです。

+0

私はそれを試してみることをお勧めします。これらのメトリックを測定するには、プロファイラを使用します。 – Maderas

+1

@Maderas確かに誰もその答えを知っていなければ、私はやらなければならないことです。 :) – Mithon

+0

私は考えていないので、あなたはあなたのテストコードとテストケース/結果で答えるなら、私はそれを愛するだろうと言った。 :D – Maderas

答えて

2

I pursued this on githubここで、短いストーリーは、json stringJObject.Parseをキャッシュして検索したところで終了しました。

質問する適切な質問は「分散キャッシュを使用していますか?私はローカルキャッシュを使用しています。私は唯一のローカルキャッシュを使用していた場合はシリアライズが関与していないよう

は、私はストレートキャッシュにJObject Sを置くことができます。

ただし、分散型キャッシュを使用する場合は、JObjectをその中に配置することはできません。そのタイプはシリアル化できないためです(SerializableAttribute)。

両方を使用すると、両方の要件に制約されます。つまり、json stringをキャッシュして取り込み時に解析することになります。

CacheManager.Serialization.Jsonパッケージを使用してシリアライズメカニズムをスワップアウトすることは可能です。しかし私はむしろPOCOのほとんどをキャッシュしているのでバイナリシリアライザを私のシナリオに保ちたいと思います。バイナリシリアライザは一般的にもっと効率的でなければなりません。私はこれを使用しても、組み込みシリアライザは内部的にJObjectsをjsonに変換しなければならないため、パフォーマンスの向上は得られないと思います。

結論:バイナリシリアライザを維持し、jsonをstringとしてキャッシュすることで、パフォーマンスが低下することはありませんが、キャッシュから読み取るときには、ここで2,を追加する必要があります。まともなカプセル化では、それは問題ではありません。

+1

Bsonのパスはデッドエンドでした。これは、base64でエンコードされた文字列を必要とするテキストベースのプロトコルで動作する必要がある場合に使用します。これは、ここで扱っているものではありません。 – Mithon

関連する問題