相关疑难解决方法(0)

MemoryCache.Set()线程安全吗?

遗憾的是,MemoryCache.SetMSDN文档没有明确说明它是否是线程安全的.

是否可以安全地使用.Get()并且.Set()没有显式锁定的几个线程?

c# thread-safety memorycache

34
推荐指数
2
解决办法
2万
查看次数

MemoryCache AbsoluteExpiration表现奇怪

我正在尝试使用MemoryCache.net 4.5跟踪并自动更新各种项目,但似乎无论我设置什么,AbsoluteExpiration它总是只会在15秒或更长时间内到期.

我希望缓存项目每5秒到期,但它总是在至少15秒内到期,如果我将到期时间移出,它最终将达到15秒+我的刷新间隔,但绝不会少于15秒.

是否有一些内部定时器分辨率,我没有看到?我查看了一些反映的System.Runtime.Caching.MemoryCache代码,并没有什么突出的我,我没有找到任何其他人在互联网上有这个问题.

我在下面有一个非常基本的例子来说明问题.

我想要的是CacheEntryUpdate每5秒左右被击中并用新数据更新,但是,正如我所说,它只会在15秒内被击中.

static MemoryCache MemCache;
static int RefreshInterval = 5000;

protected void Page_Load(object sender, EventArgs e)
{
    if (MemCache == null)
        MemCache = new MemoryCache("MemCache");

    if (!MemCache.Contains("cacheItem"))
    {
        var cacheObj = new object();
        var policy = new CacheItemPolicy
        {
            UpdateCallback = new CacheEntryUpdateCallback(CacheEntryUpdate),
            AbsoluteExpiration = DateTimeOffset.UtcNow.AddMilliseconds(RefreshInterval)
        };
        var cacheItem = new CacheItem("cacheItem", cacheObj);
        MemCache.Set("cacheItem", cacheItem, policy);
    }
}

private void CacheEntryUpdate(CacheEntryUpdateArguments args)
{
    var cacheItem = MemCache.GetCacheItem(args.Key);
    var …
Run Code Online (Sandbox Code Playgroud)

.net c# memorycache

34
推荐指数
2
解决办法
3万
查看次数

标签 统计

c# ×2

memorycache ×2

.net ×1

thread-safety ×1