gpt4 book ai didi

c# - MemoryCache 的大小设置是什么意思?

转载 作者:行者123 更新时间:2023-12-03 14:36:51 27 4
gpt4 key购买 nike

在 Controller 类中,我有

using Microsoft.Extensions.Caching.Memory;
private IMemoryCache _cache;
private readonly MemoryCacheEntryOptions CacheEntryOptions = new MemoryCacheEntryOptions()
.SetSize(1)
// Keep in cache for this time
.SetAbsoluteExpiration(TimeSpan.FromSeconds(CacheExpiryInSeconds));

在 Startup.cs 中,我有
public class MyMemoryCache
{
public MemoryCache Cache { get; set; }
public MyMemoryCache()
{
Cache = new MemoryCache(new MemoryCacheOptions
{
SizeLimit = 1024,
});
}
}

这些不同的尺寸设置是什么意思?

这是 .NET Core 2.1。

最佳答案

我能够找到一些有用的 documentation .

SizeLimit does not have units. Cached entries must specify size in whatever units they deem most appropriate if the cache size limit has been set. All users of a cache instance should use the same unit system. An entry will not be cached if the sum of the cached entry sizes exceeds the value specified by SizeLimit. If no cache size limit is set, the cache size set on the entry will be ignored.



事实证明,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");

两者 test1test2将被存储在缓存中。但如果 SizeLimit设置为 2 ,只有第一个条目将被成功存储。

关于c# - MemoryCache 的大小设置是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59774566/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com