Почему «используется» улучшение производительности C # - PullRequest
13 голосов
/ 17 июня 2010

Похоже, что в большинстве случаев компилятор C # может автоматически вызывать Dispose(). Как и большинство случаев с использованием шаблона , выглядит так:

public void SomeMethod()
{
    ...

    using (var foo = new Foo())
    {
        ...
    }

    // Foo isn't use after here (obviously).
    ...
}

Поскольку foo не используется (это очень простое обнаружение) и поскольку оно не предоставляется в качестве аргумента для другого метода (это предположение, которое применяется ко многим случаям использования и может быть расширено), компилятор может автоматически и немедленно звоните Dispose() без необходимости делать это разработчику.

Это означает, что в большинстве случаев using довольно бесполезен, если компилятор выполняет какую-то умную работу. IDisposable кажется низким уровнем мне достаточно, чтобы компилятор учел это.

Теперь, почему это не сделано? Разве это не улучшит производительность (если разработчики ... грязные ).

Ответы [ 11 ]

0 голосов
/ 17 июня 2010

Мне кажется трудным для Г.С. знать, что вы не будете использовать эту переменную позже в том же методе. Очевидно, что если вы покидаете метод и не сохраняете дальнейшую ссылку на вашу переменную, то G.C. буду распоряжаться им. Но, используя using в вашем образце, сообщает G.C. что вы уверены , что больше не будете использовать эту переменную после.

...