我能够找到一些有用的文档 https://learn.microsoft.com/en-us/aspnet/core/performance/caching/memory?view=aspnetcore-3.1#use-setsize-size-and-sizelimit-to-limit-cache-size.
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");
both test1
and test2
将被存储在缓存中。但如果SizeLimit
被设定为2
,只有第一个条目会被成功存储。