2017-01-31 35 views
3

複数のWindowsサービスが実行されていますが、これらは異なるプロセスにあります。これらのプロセスには共通のSystem.Runtime.Caching.MemoryCacheがあります。プロセスごとに?System.Runtime.Caching.MemoryCacheは同じサーバー内の複数のプロセス間で共有されています

もしそうでなければ、サーバー上の.net上にキャッシュ名前空間の同じインスタンスを共有するキャッシュ機構があります。

私はredisのような分散キャッシングを探していません。私は1つのサーバー内のメモリ内のキャッシュを共有したいが、複数のプロセスがあるので、ネットワークを別のサーバーに移動してデータを取得し、逆シリアル化するのではなく、はるかに高速である。

答えて

1

System.Runtime.Caching.MemoryCacheは、 。あなたの最善の解決策は、単一のサーバー(あなたのアプリケーションを実行しているサーバー)で分散キャッシュ(Re​​dis、Memcacheなど)を使用することです。

C#オブジェクトはプロセス空間全体に直接渡すことはできません。そのため、必然的に起こるシリアライゼーションが必然的に発生します。

0

MemoryCacheでは、オブジェクトをキャッシュするために使用されるメモリがアプリケーションプールにバインドされているため、プロセス間でメモリを共有することはできません。それはあなたが見つけるメモリ内のキャッシュインプリメンテーションの性質です。

実際に共有キャッシュを使用する唯一の方法は、分散キャッシュを使用することです。

しかし、C#でメモリを共有する方法はありますが、それはもはや実際のキャッシュではありません。 ここでは、古い答えで指摘されているように、メモリマップファイルを使用することができますsharing memory between two applications

+0

メモリマップファイル - Runtime.MemoryCacheよりもはるかに遅いようです。以前はプロダクション環境でこれを使用しましたか? – MoXplod

+0

いいえ、私はどれくらい速いのか分かりません。私は通常、データベースまたはRedis plusのメモリ内キャッシュを使用しています。> http://cachemanager.net。 – MichaC

+0

あなたのサイトにもチャットがあると思います:)私は、バックプレーンに基づいて、ローカルキャッシュを構築していますが、同じマシン上で実行される異なるプロセス間でローカルキャッシュを共有したいと考えました。各プロセスで重複したコピーを持つ代わりに。 – MoXplod

関連する問題