我有以下课程,我已为此示例进行了简化
public class SearchService : ISearchService
{
private static Dictionary<long, object> _resultCache = new Dictionary<long, object>();
public SearchService()
{
_resultCache.Add(new Random().Next(),new Cat());
}
}
此服务在 .net core 服务中注册为
service.AddScoped<ISearchService,SearchService>();
意味着将为每个请求注册一个新服务
实例类中的静态变量会导致类无法被释放吗?
因此导致内存泄漏
从内存消耗的角度来看,你有一个无限增长的字典,并且还保留了
Cat
的实例。因此,此类对象将会出现某种“泄漏”。 SearchService
实例本身不会被泄露。您可以考虑在 SearchService.Dispose
或其他位置添加一些额外的逻辑,以便从字典中删除那些不再需要的 Cat
对象。作为一种选择,您可以考虑将缓存逻辑完全移到单独的服务中,并应用一些过期策略和其他清理策略,或者只是使用一些现有的缓存解决方案。