Quali sono le conseguenze di avere riferimenti e usi non necessari?


12

Sono un po 'fuori di testa e tendo a mantenere i miei progetti pulendo i riferimenti usingin ogni classe per mantenere solo ciò che è effettivamente utilizzato.

Quale altro argomento potrei fare (oltre a calmare il mio nervo ossessivo compulsivo) di attenermi all'essenziale? Penso principalmente ai riferimenti di sistema, qualsiasi riferimento al lavoro personalizzato porterà molti problemi di compatibilità con le versioni precedenti. L'impronta di rilascio è maggiore? Tempo di compilazione più lungo?


5
Nota che usings e riferimenti non sono la stessa cosa. Molte delle risposte non riescono a tenerne conto.
phoog

1
Se ti piace mantenere pulito il codice e utilizzarlo al minimo, considera l'acquisto di ReSharper. Estensione straordinaria di Visual Studio. Non posso vivere / programmare senza. ;-)
Anders,

Risposte:


13

Intellisense ti sarà molto più utile se tieni usingal minimo, e questo è un grande vantaggio.

A parte questo, non credo che ci sia alcun guadagno. Quindi forse il compilatore C # funzionerà più velocemente, diciamo, dell'1%; e allora.


1
Il valore cumulativo di quell'1% è considerevole ... ma fondamentalmente ti aspetteresti che il compilatore ottimizzi qualsiasi problema. Comunque non ho problemi a essere semplicemente in ordine
Murph il

IntelliSense di C # è stato comunque un po 'disordinato da circa il 2005, quando hanno iniziato a scaricare assolutamente tutto nell'elenco.
Rei Miyasaka, il

@ReiMiyasaka in modo da ottenere IntelliSense per quello che vuoi e poi fare Ctrl+.per risolvere rapidamente "Aggiungi spazio dei nomi XYZ"
kizzx2

1
@Murph: non importa quanto grande sia il valore cumulativo dell'1%, sarà comunque l'1% del totale cumulato, quindi sarà sempre irrilevante. Inoltre, il compilatore non può ignorare alcun usings finché non ha capito che in realtà non sono necessari, ma non può capirlo a meno che non abbia compilato prima l'intero file sorgente. Come per i riferimenti ai progetti, non vengono scartati solo perché non sembrano essere utilizzati, poiché potrebbero essere utilizzati in modo dinamico (non rilevabile in fase di compilazione).
Mike Nakis,

1
Un po 'in ritardo, ma nel mio caso stiamo creando un'app per un dispositivo con risorse molto limitate. L'aggiunta di riferimenti non necessari influirà sulla dimensione finale dell'applicazione. E bene proveremo a distribuire il pacchetto e competere con altri pacchetti, un pacchetto più grande può far riflettere due volte l'utente sul fatto di scaricare l'app.
hmadrigal,

9

Dal momento che è praticamente banale farlo in Visual Studio (semplice clic destro), perché non farlo?

Ciò è coerente con Occam's Razor , è semplicemente una buona ingegneria.

Quanto alle conseguenze del non farlo, considera cosa succede se qualche altro sviluppatore tenta di aprire il tuo progetto e contiene un riferimento (non utilizzato) a una libreria che non ha sul suo computer. Ora quel povero sviluppatore deve capire perché esiste quel riferimento irrisolto e cosa fare al riguardo.

Se preferisci, consideralo in termini di regola d'oro. Vorresti assumere lo sviluppo di un progetto che aveva molti riferimenti a librerie che non avevi sul tuo computer e che non avevi idea del perché siano lì?


+1, c'è un componente aggiuntivo che può farlo per l'intera soluzione. Questo mi ha anche ricordato ClojureScript e il video di Google Closure in cui l'ottimizzazione dell'intero programma è importante poiché una tipica pagina Web è di circa 1 MB ora. È una buona abitudine avere - per pulire le cose che non sono necessarie.
Giobbe

6

usingle istruzioni sono semplicemente per il compilatore in grado di fare completamente riferimento alle classi, ecc. Le usingistruzioni extra non avranno alcun effetto apprezzabile sui tempi di compilazione.

Inoltre, il runtime non caricherà un assembly referenziato fino a quando non sarà effettivamente necessario, quindi non credo che ci siano conseguenze negative di riferimenti non necessari.

Se usi uno strumento come Reflector, trovare e rimuovere questi bit non necessari può essere per lo più automatizzato, quindi direi che è inutile dedicare molto tempo a queste attività. Ad esempio, un'ora o due di rimozione manuale delle usingdichiarazioni non necessarie paga più di una licenza Reflector - e viene fornito con molte altre funzionalità di miglioramento della produttività.


La pulizia con's è una funzionalità integrata di VS 2010 (penso anche per il 2008). E ReSharper può fare anche i riferimenti. Ma sì, prima di intraprendere qualsiasi operazione di pulizia su larga scala, esaminerei l'uso di uno strumento per fare questo per me.
MPelletier,

+1 per esprimere chiaramente la distinzione tra usingriferimenti inutilizzati e riferimenti inutilizzati. I due sono molto diversi!
phoog,

1

Oltre a quanto sopra, suppongo che non sia stato ancora menzionato qui che ogni riferimento richiede un componente all'interno del framework .NET o una DLL esterna. Se viene fatto riferimento a una DLL esterna, sarà necessario averla quando (e dove) si esegue il software.

Modifica - Come da commento valido di phoog di seguito: L'applicazione verrebbe comunque eseguita se la DLL non viene utilizzata e non è necessario che sia spedita con l'applicazione solo perché è stata aggiunta ai riferimenti. Per occuparti dei riferimenti non utilizzati nel codice, potresti voler esaminare: Rimozione dei riferimenti non utilizzati .


1
Se il riferimento non viene utilizzato, non sarà necessaria la DLL quando e dove si esegue il software.
phoog

@phoog, grazie per il tuo commento. Almeno in .NET VS2010, se si aggiunge manualmente un riferimento alla soluzione, la DLL viene fisicamente aggiunta alla cartella bin anche se non viene utilizzata nel codice.
NoChance,

1
Tuttavia, se si elimina la DLL dalla cartella bin o si pubblica l'applicazione senza la DLL, l'applicazione dovrebbe comunque essere eseguita.
phoog,

@phoog, hai ragione, grazie per averlo segnalato. Modificherò il post.
NoChance,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.