Статическое свойство и утечка памяти потенциальной инъекции конструктора - PullRequest
1 голос
/ 13 мая 2019

У меня есть задача начальной загрузки, которая запускается при запуске.Я получаю объект, синглтон, вставленный в конструктор, а затем я устанавливаю статическое свойство для этого объекта.Не приведет ли это к тому, что класс 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> вставляется в конструктор languageLocaliser, который ссылается на объект в контейнере DI.Local статический класс затем ссылается на languageLocaliser, который является частью BootstrapperTask.Поскольку Local является статическим и будет действовать до конца приложения, означает ли это, что BootstrapperTask не может быть очищен из-за Local, указывающего на languageLocaliser?

1 Ответ

3 голосов
/ 13 мая 2019

Если есть ссылка на ваш экземпляр класса,

Local.LanguageLocaliser = languageLocaliser // reference 

Тогда счетчик ссылок будет больше 0, и поэтому сборка мусора не будет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...