Установка объектов в Null/Nothing после использования в .NET

Еще одна причина, по которой memory-allocation не следует присваивать объектам c-sharp значение null после завершения memory-management работы с ними, заключается nulls в том, что это действительно .net может продлить их жизнь.

напр.

void foo()
{
    var someType = new SomeType();
    someType.DoSomething();
    // someType is now eligible for garbage collection         

    // ... rest of method not using 'someType' ...
}

позволит csharp GC'ировать объект, на который c-sharp ссылается someType, после null вызова "DoSomething", но

void foo()
{
    var someType = new SomeType();
    someType.DoSomething();
    // someType is NOT eligible for garbage collection yet
    // because that variable is used at the end of the method         

    // ... rest of method not using 'someType' ...
    someType = null;
}

может c#.net иногда сохранять объект живым null до конца метода. JIT will usually optimized away the assignment to null, так что c# оба бита кода в конечном memory-allocation итоге будут одинаковыми.

c#

.net

vb.net

memory-management

null

2022-10-10T18:32:26+00:00
Вопросы с похожей тематикой, как у вопроса:

Установка объектов в Null/Nothing после использования в .NET