2017-01-31 9 views
3

У меня работает несколько служб Windows, которые находятся на разных процессах, является общим для этих процессов System.Runtime.Caching.MemoryCache или является отдельным экземпляром для каждого процесса?System.Runtime.Caching.MemoryCache является общим для процессов на одном сервере

Если нет, существует ли механизм кэширования, который использует один и тот же экземпляр пространства имен кэша на .net на сервере.

Я не ищу распределенное кэширование, такое как redis. Я хочу разделить кеш памяти в ОДНОМ сервере, но с несколькими процессами, поэтому он намного быстрее, чем переключение на другой сервер, получение данных, десериализация и т. Д.

ответ

1

System.Runtime.Caching.MemoryCache работает только в рамках одного процесса , Лучшее решение - использовать распределенный кеш (например, Redis, Memcache, ...) с одним сервером (на сервере, на котором запущены ваши приложения).

Объекты C# не могут быть переданы непосредственно через технологические пространства, поэтому неизбежно произойдет какая-то сериализация.

0

MemoryCache не позволяет обмениваться памятью между процессами, поскольку память, используемая для кэширования объектов, привязана к пулу приложений. Это характер любой реализации кэша в памяти, которую вы найдете.

Единственный способ использовать общий кэш - использовать распределенный кеш.

Однако существуют способы обмена памятью на C#, но это не настоящее кэширование. Вы можете использовать файлы с отображением памяти, например, как указано в более старом ответе. sharing memory between two applications

+0

Файлы с отображением памяти. Похоже, что это будет намного медленнее, чем Runtime.MemoryCache. Вы использовали это раньше в производственной среде? – MoXplod

+0

Нет, я не знаю, как быстро. Обычно я использую либо базу данных, либо redis плюс кеш в памяти перед ней => http://cachemanager.net. – MichaC

+0

Думаю, у нас также был чат на вашем сайте :) Я также создаю локальный кеш поверх redis на основе объединительной платы, но хочу поделиться локальным кешем между различными процессами, которые запускаются на одном компьютере. Вместо того, чтобы дублировать копии в каждом процессе. – MoXplod