实例类中的静态变量会导致c#中的内存泄漏吗

问题描述 投票:0回答:1

我有以下课程,我已为此示例进行了简化

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>();

意味着将为每个请求注册一个新服务

实例类中的静态变量会导致类无法被释放吗?

因此导致内存泄漏

c# memory-leaks static
1个回答
1
投票

从内存消耗的角度来看,你有一个无限增长的字典,并且还保留了

Cat
的实例。因此,此类对象将会出现某种“泄漏”。
SearchService
实例本身不会被泄露。您可以考虑在
SearchService.Dispose
或其他位置添加一些额外的逻辑,以便从字典中删除那些不再需要的
Cat
对象。作为一种选择,您可以考虑将缓存逻辑完全移到单独的服务中,并应用一些过期策略和其他清理策略,或者只是使用一些现有的缓存解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.