Мне удалось выследить некоторую полезную документацию .
SizeLimit не имеет единиц измерения. Кэшированные записи должны указывать размер в тех единицах, которые они считают наиболее подходящими, если установлен предел размера кэша. Все пользователи экземпляра кэша должны использовать одну и ту же систему единиц. Запись не будет кэшироваться, если сумма размеров кэшированных записей превышает значение, указанное в SizeLimit. Если ограничение размера кэша не задано, размер кэша, установленный для записи, будет игнорироваться.
Оказывается, что SizeLimit может действовать как ограничение на количество записей, а не на размер этих записей .
Приложение быстрого примера показало, что при SizeLimit, равном 1, следующее:
var options = new MemoryCacheEntryOptions().SetSize(1);
cache.Set("test1", "12345", options);
cache.Set("test2", "12345", options);
var test1 = (string)cache.Get("test1");
var test2 = (string)cache.Get("test2");
test2
будет нулевым.
В свою очередь, SetSize()
позволяет вам точно контролировать размер ограничения на размер записи. Например, в следующем примере:
var cache = new MemoryCache(new MemoryCacheOptions
{
SizeLimit = 3,
});
var options1 = new MemoryCacheEntryOptions().SetSize(1);
var options2 = new MemoryCacheEntryOptions().SetSize(2);
cache.Set("test1", "12345", options1);
cache.Set("test2", "12345", options2);
var test1 = (string)cache.Get("test1");
var test2 = (string)cache.Get("test2");
и test1
, и test2
будут сохранены в кэше. Но если для SizeLimit
установлено значение 2
, будет успешно сохранена только первая запись.