Quais são as consequências de ter referências e usos desnecessários?


12

Sou meio louco e tendem a manter meus projetos limpando referências usinges em cada classe para manter apenas o que é realmente usado.

Que outro argumento eu poderia fazer (além de acalmar o nervo do TOC) para manter o essencial? Estou pensando principalmente em referências do sistema, qualquer referência ao trabalho personalizado trará muitos problemas de compatibilidade com versões anteriores. A pegada de lançamento é maior? Compilar mais tempo?


5
Observe que se usingreferências não são a mesma coisa. Muitas das respostas não levam isso em consideração.
Phoog

1
Se você deseja manter o código limpo e usando o mínimo possível, considere comprar o ReSharper. Incrível extensão para o Visual Studio. Não posso viver / programar sem. ;-)
Anders

Respostas:


13

O Intellisense será muito mais útil para você se você mantiver o usingmínimo possível, e essa é uma grande vantagem.

Fora isso, acho que não há nenhum ganho. Portanto, talvez o compilador C # funcione mais rápido, digamos, 1%; E daí.


1
O valor cumulativo desses 1% é considerável ... mas, fundamentalmente, você esperaria que o compilador otimizasse qualquer problema. No entanto eu não tenho um problema com simplesmente ser arrumado
Murph

C # IntelliSense tem sido um pouco confuso de qualquer maneira desde 2005, quando eles começaram a colocar absolutamente tudo na lista.
Rei Miyasaka

@ReiMiyasaka para que você obtenha IntelliSense para o que quiser e, em seguida, fazer Ctrl+.a correção rápida "Adicionar namespace XYZ"
kizzx2

1
@ Murph: não importa quão grande seja o valor acumulado de 1%, ele ainda será 1% do total acumulado, por isso sempre será inconseqüente. Além disso, o compilador não pode desconsiderar nenhum usings até descobrir que eles são de fato desnecessários, mas não pode descobrir isso a menos que tenha compilado primeiro o arquivo de origem inteiro. Como nas referências de projeto, elas não são descartadas apenas porque não parecem ser usadas, porque podem ser usadas de maneira dinâmica (não detectável em tempo de compilação).
quer

1
Um pouco tarde, mas no meu caso, estamos criando um aplicativo para um dispositivo de recursos muito limitados. Adicionar referências desnecessárias afetará o tamanho final do aplicativo. E bem, tentaremos distribuir o pacote e competir com outros pacotes. Um pacote maior pode fazer o usuário pensar duas vezes sobre o download ou não do aplicativo.
precisa saber é

9

Como é praticamente trivial fazer isso no Visual Studio (clique com o botão direito do mouse), por que não fazer?

Isso é consistente com o Navalha de Occam , é simplesmente uma boa engenharia.

Quanto às consequências de não fazê-lo, considere o que acontece se algum outro desenvolvedor tentar abrir seu projeto e ele contiver uma referência (não usada) a uma biblioteca que ele / ela não possui em seu computador. Agora esse desenvolvedor pobre precisa descobrir por que essa referência não resolvida existe e o que fazer com isso.

Se preferir, considere-o em termos da regra de ouro. Você gostaria de assumir o desenvolvimento de um projeto que tinha muitas referências a bibliotecas que você não tinha no seu computador e que não fazia ideia do porquê delas estão lá?


+1, há um suplemento que pode fazer isso para toda a solução. Isso também me lembrou o vídeo do ClojureScript e do Google Closure, onde a otimização de todo o programa é importante, já que uma página da Web típica tem cerca de 1 MB. É um bom hábito ter - limpar coisas que não são necessárias.
Job

6

usingAs instruções são simplesmente para que o compilador possa fazer referência completa às classes, etc. As usinginstruções extras não terão efeito apreciável no tempo de compilação.

Além disso, o tempo de execução não carregará um assembly referenciado até que seja realmente necessário; portanto, novamente, não acredito que haja consequências negativas de referências desnecessárias.

Se você usar uma ferramenta como o Reflector, encontrar e remover esses bits desnecessários pode ser automatizado, por isso, seria um desperdício gastar muito tempo nessas atividades. Por exemplo, uma hora ou duas de remoção manual de usinginstruções desnecessárias mais do que paga por uma licença do Reflector - e vem com muitos outros recursos para melhorar a produtividade.


Limpar usando é um recurso interno do VS 2010 (acho que 2008 também). E o ReSharper também pode fazer as referências. Mas sim, antes de iniciar qualquer limpeza em grande escala, eu usaria uma ferramenta para fazer isso por mim.
MPelletier

+1 por expressar claramente a distinção entre se não utilizado usinge referências não utilizadas. Os dois são muito diferentes!
Phoog

1

Além do exposto, acho que ainda não foi mencionado aqui que, cada referência requer um componente dentro da estrutura .NET ou de uma DLL externa. Se a referência for feita a uma DLL externa, você precisará disso quando (e onde) você executar o software.

Editar - conforme comentário válido de phoog abaixo: O aplicativo ainda será executado se a DLL não for usada e não precisar ser enviada com o aplicativo apenas porque foi adicionada às referências. Para cuidar de referências não usadas no código, você pode observar: Removendo referências não utilizadas .


1
Se a referência não for usada, você não precisará da DLL quando e onde executar o software.
Phoog

@ Phohoog, obrigado pelo seu comentário. Pelo menos no .NET VS2010, se você adicionar manualmente uma referência à solução, a DLL será fisicamente adicionada à pasta bin, mesmo que você não a use no código.
NoChance

1
Mas, se você excluir a DLL da pasta bin ou publicar o aplicativo sem a DLL, o aplicativo ainda deverá ser executado.
Phoog

@ Phoho, você está correto, obrigado por apontar isso. Vou editar a postagem.
NoChance
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.