Есть ли способ обеспечить ограничение размера MemoryCache в System.Runtime.Caching? - PullRequest
21 голосов
/ 05 апреля 2011

Я использую .net 4 Memory Cache. Я хотел бы ограничить размер кэша, скажем, до 10 МБ, потому что я не хочу, чтобы мое приложение злоупотребляло тем, что там происходит.

Я также хотел бы знать, сколько памяти занимает мой кеш в любой момент времени. Как я могу сказать во время выполнения?

Ответы [ 3 ]

42 голосов
/ 05 апреля 2011

Вы можете указать максимальный объем физической памяти, выделенной для MemoryCache, в файле конфигурации приложения, используя элемент namedCaches , или передав настройку при создании экземпляра MemoryCache через NameValueCollection передается в конструктор путем помещения записи в коллекцию с ключом cacheMemoryLimitMegabytes и значением 10.

Вот пример элемента конфигурации namedCaches:

<configuration>
  <system.runtime.caching>
    <memoryCache>
      <namedCaches>
        <add name="Default" 
          cacheMemoryLimitMegabytes="10" 
          physicalMemoryLimitPercentage="0"
          pollingInterval="00:05:00" />
      </namedCaches>
    </memoryCache>
  </system.runtime.caching>
</configuration>

А вот как вы можете настроить MemoryCache при создании:

//Create a name / value pair for properties
var config = new NameValueCollection();
config.Add("pollingInterval", "00:05:00");
config.Add("physicalMemoryLimitPercentage", "0");
config.Add("cacheMemoryLimitMegabytes", "10");

//instantiate cache
var cache = new MemoryCache("CustomCache", config);

В этом блоге подробно описываются все способы настройки объекта MemoryCache, и некоторые примеры были адаптированы из этого источника.

8 голосов
/ 05 апреля 2011

Вы можете сделать это в конфигурации ... например ...

<system.runtime.caching>
   <memoryCache>
      <namedCaches>
         <add name="Default"
              cacheMemoryLimitMegabytes="52"
              physicalMemoryLimitPercentage="40"
              pollingInterval="00:04:01" />
      </namedCaches>
   </memoryCache>
</system.runtime.caching>

Чтобы сделать это в коде, см. ... эту страницу MSDN

5 голосов
/ 23 декабря 2011

Кажется, в настоящее время максимальный объем памяти, выделенный для кеша, не может быть применен. См. Этот пост для дальнейшего использования: MemoryCache не подчиняется ограничениям памяти в конфигурации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...