Как сохранить локальный объект не быть GCed в C #? - PullRequest
1 голос
/ 13 февраля 2012

У меня есть этот метод:

private static void StartLicensePlateMonitor(Autofac.IContainer container)
    {

        var monitor = container.Resolve<LicensePlate.LicensePlateUploadMonitor>();
        monitor.Start();

        System.GC.KeepAlive(monitor); //does this work?

    }

Я хочу, чтобы монитор оставался активным все время, пока программа не закрылась, делает оператор "System.GC.KeepAlive (monitor);"работать?

1 Ответ

2 голосов
/ 13 февраля 2012

Нет.Документация для System.GC.KeepAlive() говорит, что она гарантирует, что аргумент жив до вплоть до вызова KeepAlive().Это просто фиктивная функция, которую GC обещает не проверять на фактическое использование аргумента.

Если вы хотите, чтобы объект оставался в живых, убедитесь, что на него всегда есть ссылка.Этого должно быть достаточно, чтобы сохранить его в поле private static.Если у вас есть произвольное их количество, сохраните его в поле List в поле.

...