c# - 静态属性和构造函数注入(inject)潜在的内存泄漏

标签 c# asp.net-core .net-core

我有一个在启动时运行的 Bootstrap 任务。我得到一个对象,一个单例,注入(inject)到构造函数中,然后我为这个对象设置了一个静态属性。这会导致 boostrapper 类不是 GCd 吗?

public class BootstrapperTask : IStartupTask
{
    public BootstrapperTask
    (
        ILocaliser<string> languageLocaliser
    )
    {
        //here I set the static property
        Local.LanguageLocaliser = languageLocaliser;
    }
    public async Task ExecuteAsync(CancellationToken cancellationToken = default)
    {
        // perform startup actions
    }
}

单例 ILocaliser<string>被注入(inject)到构造函数中,languageLocaliser ,它引用 DI 容器中的对象。 Local静态类然后引用 languageLocaliser这是 BootstrapperTask 的一部分.因为Local是静态的,会一直存在到应用程序结束,这是否意味着 BootstrapperTask由于 Local 无法清理指向 languageLocaliser

最佳答案

如果有对你的实例化类的引用,

Local.LanguageLocaliser = languageLocaliser // reference 

然后引用计数将大于0,因此不会被垃圾回收

关于c# - 静态属性和构造函数注入(inject)潜在的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56104304/

相关文章:

c# - 设计选择 : Entity Framework vs Raw SQL

c# - 如何在 C# Windows 应用程序中进行身份验证和授权?

c# - 比较 Linq to Entity 中的字符串

azure - Azure AD + ASP.Net Core 2.1 出现未经授权的响应,并出现无效受众错误

c# - 可空性分析无法对来自 NameValueCollection 的 null 发出警告。为什么?

c# - Nullable Int 输入字符串的格式不正确

c# - FromHeaderAttribute 不适用于属性

html - 防伪 - 更好地了解其工作原理

c# - 具有未加密 HTTP2 连接的 .Net Core 3.1 gRPC 客户端

wpf - 如何将 Microsoft Edge WebView2 Runtime 添加为先决条件