首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在内存缓存包装类中检索总缓存大小

在内存缓存包装类中检索总缓存大小
EN

Stack Overflow用户
提问于 2021-06-23 00:40:34
回答 1查看 36关注 0票数 1

我有一个类(它被实例化为单例)包装在ASP.Net的IMemoryCache依赖项中,如下所示:

代码语言:javascript
复制
using Microsoft.Extensions.Caching.Memory;
using System;

namespace Lambgoat.Web.Cache
{
    public class CacheStrategy : ICacheStrategy
    {
        private readonly IMemoryCache _cache;
        public CacheStrategy(IMemoryCache cache)
        {
            _cache = cache;
        }

        public T Set<T>(string key, T value, DateTimeOffset expiration, int size = 1)
        {
            var cacheEntryOptions = new MemoryCacheEntryOptions().SetSize(size).SetAbsoluteExpiration(expiration);
            return _cache.Set(key, value, cacheEntryOptions);
        }

        public bool Exists<T>(string id, out T value) where T : new()
        {
            bool exists = _cache.TryGetValue<T>(id, out T cacheValue);
            value = cacheValue ?? new T();
            return exists;
        }

        public void Invalidate(string id) => _cache.Remove(id);
    }
}

当调用Set()方法时,我想检查缓存总大小是否接近我在Startup.cs中设置的大小限制,如下所示:

代码语言:javascript
复制
if (totalCacheSize + 10 > 1024) {
    _cache.Compact(.33);
}

我的问题是检索总的缓存大小;如何做这样的事情呢?

EN

回答 1

Stack Overflow用户

发布于 2021-06-23 06:09:27

如果将缓存实例存储为具体的MemoryCache而不是IMemoryCache,则可以访问其唯一的公共属性Count。其他与大小相关的东西都是内部的。

代码语言:javascript
复制
private readonly MemoryCache _cache;
public CacheStrategy(IMemoryCache cache)
{
    _cache = (MemoryCache)cache;
}

然后检查Count

代码语言:javascript
复制
if (_cache.Count > 1024) {
    _cache.Compact(.33);
}

由于Count表示条目的数量,因此无法知道它对应的实际内存使用量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68087587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档