Como o desempenho é afetado por uma diretiva using não utilizada?

110

O Visual Studio criará automaticamente usando instruções para você sempre que você criar uma nova página ou projeto. Alguns deles você nunca usará.

O Visual Studio tem o recurso útil para "remover usos não utilizados".

Eu me pergunto se há algum efeito negativo no desempenho do programa se as instruções using, que nunca são acessadas, permanecerem mencionadas no topo do arquivo.

KdgDev
fonte
Eu pesquisei antes de perguntar e não apareceu.
KdgDev
6
FWIW, essa postagem tem um SEO melhor: foi o primeiro resultado no Google para mim. Dos 2 originais vinculados, um está indisponível (removido) e o outro está redigido de forma diferente o suficiente para agregar algum valor a esta postagem, mesmo que apenas como um redirecionamento.
DaveD
@DaveD primeiro para você porque o Google conhece suas preferências exatas e histórico de pesquisa. No computador do meu amigo não foi o primeiro.
ilias iliadis

Respostas:

133

Um uso não utilizado não tem impacto no desempenho de tempo de execução de seu aplicativo.

Isso pode afetar o desempenho do IDE e a fase geral de compilação. O motivo é que ele cria um namespace adicional no qual a resolução de nomes deve ocorrer. No entanto, eles tendem a ser menores e não devem ter um impacto perceptível em sua experiência de IDE para a maioria dos cenários.

Também pode afetar o desempenho de avaliação de expressões no depurador pelos mesmos motivos.

JaredPar
fonte
38
Quanto mais usos houver, mais lento será o Intellisense
Riegardt Steyn
14

Não, é apenas uma coisa de tempo de compilação / estilo de codificação. Os binários .NET usam nomes totalmente qualificados nos bastidores.

ChrisV
fonte
3
Isso significa que nomes de classes e métodos mais longos têm um impacto pequeno, mas real (se incomensurável) nos tempos de compilação JIT?
Jared Updike
8

Nenhum efeito na velocidade de execução, mas pode haver um pequeno efeito na velocidade de compilação / intellisense, pois há mais namespaces potenciais para pesquisar a classe adequada. Eu não me preocuparia muito com isso, mas você pode usar o item de menu Organizar Usings para remover e classificar as instruções using.

Tvanfosson
fonte
8

O link a seguir Uma boa leitura sobre por que remover referências não utilizadas explica como é útil remover referências não utilizadas do aplicativo.

Abaixo estão alguns trechos do link:

  1. Ao remover quaisquer referências não utilizadas em seu aplicativo, você está evitando que o CLRcarregue os módulos referenciados não utilizados no tempo de execução. O que significa que você reduzirá o tempo de inicialização de seu aplicativo, pois leva tempo para carregar cada módulo e evita que o compilador carregue metadados que nunca serão usados. Você pode descobrir que, dependendo do tamanho de cada biblioteca, seu tempo de inicialização é visivelmente reduzido. Isso não quer dizer que seu aplicativo será mais rápido depois de carregado, mas pode ser muito útil saber que o tempo de inicialização pode ser reduzido.

  2. Outro benefício de remover quaisquer referências não utilizadas é que você reduzirá o risco de conflitos com namespaces. Por exemplo, se você tiver System.Drawinge System.Web.UI.WebControlsreferenciado, poderá descobrir que obtém conflitos ao tentar fazer referência à Imageclasse. Se você usa diretivas em sua classe que correspondem a essas referências, o compilador não pode dizer qual delas usar. Se você usa o preenchimento automático regularmente durante o desenvolvimento, a remoção de namespaces não utilizados reduzirá o número de valores de preenchimento automático em seu editor de texto conforme você digita.

Deepak Tekchandani
fonte
5

Não, há vários processos envolvidos na compilação de um programa. Quando o compilador começar a procurar por referências (classes, métodos), ele usará apenas aquelas usadas no código. A diretiva using apenas diz ao compilador onde procurar. Muitas instruções using não utilizadas podem ter um problema de desempenho, mas apenas em tempo de compilação. Em tempo de execução, todo o código externo é devidamente vinculado ou incluído como parte do binário.

Freddy
fonte
5

O código que não executa não afeta o desempenho de um programa.

Jeff Leonard
fonte