System.Runtime.Caching.MemoryCache是​​在同一服务器中的进程之间共享的

时间:2017-01-31 03:07:15

标签: c# .net caching windows-services

我有多个运行的Windows服务,它们位于不同的进程上,是这些进程常用的System.Runtime.Caching.MemoryCache还是每个进程的单独实例?

如果没有,是否有一个缓存机制在服务器上的.net上共享相同的缓存命名空间实例。

我不是在寻找像redis这样的分布式缓存。我想在一台服务器内共享内存缓存但是有多个进程,所以它要快得多,而不是通过网络连接到另一台服务器并获取数据,反序列化等等。

2 个答案:

答案 0 :(得分:3)

System.Runtime.Caching.MemoryCache仅适用于单个流程。您最好的解决方案是使用分布式缓存(如Redis,Memcache,...)和单个服务器(运行应用程序的服务器)。

C#对象不能直接在进程空间之间传递,因此不可避免地会出现某种序列化。

答案 1 :(得分:1)

MemoryCache不允许您在进程之间共享内存,因为用于缓存对象的内存绑定到应用程序池。这是您可以找到的任何内存缓存实现的本质。

实际使用共享缓存的唯一方法是使用分布式缓存。

但是,有一些方法可以在C#中共享内存,但这不再是实际的缓存。 例如,您可以使用内存映射文件,如此处sharing memory between two applications

中较早的答案所述