Spesso sento persone elogiare la velocità di compilazione di C#. Finora ho realizzato solo alcune applicazioni minuscole, e in effetti ho notato che la compilazione era molto veloce. Tuttavia, mi chiedevo se questo vale ancora per grandi applicazioni. I grandi progetti C# vengono compilati più rapidamente dei progetti C++ di dimensioni simili?Tempo di compilazione C# per progetti di grandi dimensioni (rispetto a C++)
risposta
Per quanto ne so dalla mia esperienza, sì, C# si compila molto più velocemente dei progetti C++. Anche per applicazioni di grandi dimensioni.
Questo può essere spiegato dal fatto che C# è meno complicato di un linguaggio rispetto al C++ e che C# è tradotto in IL (che può essere ottimizzato e tradotto in seguito in codice macchina) e C++ viene tradotto immediatamente in linguaggio macchina .
Sì, C# si compila molto più velocemente. Tuttavia non sempre abbastanza veloce. Il mio più grande numero di codice C# con forse un milione di righe di codice con molti progetti ha richiesto circa un'ora per essere compilato. Ma sospetto che gran parte di questo tempo sia dovuto allo scarso sistema di costruzione degli studi visivi. Il tempo di compilazione per C++ di solito è in genere molto più lungo, ma dipende anche molto da come si organizza il codice. Una scarsa gestione delle dipendenze dei file di intestazione può facilmente aumentare il tempo di compilazione con diversi ordini di grandezza.
+1 per il commento sulla gestione dei file di intestazione - siamo passati da 1 ora a 8 minuti sul nostro grande progetto C++ ordinando i file header! –
C++ è così lento da compilare in quanto i file di intestazione devono essere riletti e ripetuti ogni volta che vengono inclusi. A causa del modo in cui "#defines" funziona, è molto difficile per un compilatore precompilare automaticamente tutti i file di intestazione. (Modula-2 ha fatto un lavoro molto migliore di questo) Avere 100s di intestazioni leggere per ogni file C++ che è compilato è normale su molti progetti C++.
A volte le compulazioni C++ incrementali possono essere molto più veloci di C#. Se hai tutti i tuoi file di intestazione C++ (e design) in uno stato molto buono (vedi libri come Large-Scale C++ Software Design, Effective C++) Puoi apportare una modifica all'implementazione di una classe che viene utilizzata dalla maggior parte del sistema e avere una sola dll ricompilare .
Poiché C# non ha file di intestazione separati ogni volta che si modifica l'impianto di una classe, tutti gli usi della classe vengono ricompilati anche se l'interfaccia pubblica della classe non è stata modificata. Questo può essere ridotto in C# usando "programmazione basata su interfaccia" e "iniezione dipendenza" ecc. Ma è ancora un dolore.
Tuttavia, nel complesso, trovo che C# compili abbastanza velocemente, ma i progetti C++ di grandi dimensioni sono così lenti da compilare che non trovo il voler aggiungere metodi a una "classe base" a causa del tempo di ricostruzione.
Avere un sacco di progetti di Visual Studio con una manciata di classi in ciascuno può rallentare molto C#. Combinare insieme i progetti correlati e poi "fidarsi" degli sviluppatori di non usare classi private in uno spazio dei nomi può a volte avere un grande vantaggio. (nDepends può essere usato per verificare se qualcuno infrange le regole)
(Quando si cerca di accelerare le compilazioni C++, ho trovato FileMon molto utile: un progetto su cui ho lavorato, l'STL è stato aggiunto a un file di intestazione e il build ottenuto molto più lento, solo aggiungere STL al file di intestazione precompilato ha fatto una grande differenza! Quindi traccia il tempo di costruzione e indagare quando diventa più lento)
+1 per indicare il problema C# con progetti dipendenti che richiedono una ricostruzione quando si modifica solo l'implementazione di una libreria. C++ fa un lavoro migliore separando chiaramente l'interfaccia dall'implementazione, rendendola più adatta a progetti di grandi dimensioni. L'iniezione delle dipendenze è solo una soluzione, poiché costringe l'intera base di codice a essere riscritta in modo conforme, cioè è invasiva. –
È anche mia osservazione che C# è molto più veloce da compilare di C++. Uno dei motivi principali è naturalmente i template che non hanno bisogno di essere nelle intestazioni in C#, poiché non ci sono intestazioni. Ma l'uso massiccio di template (per lo più qualsiasi libreria C++ moderna come Boost) sta uccidendo il tempo di compilazione in C++.
- 1. Superamento dei limiti C per i progetti di grandi dimensioni
- 2. Tutorial Emacs per progetti di grandi dimensioni
- 3. C# - Memoria di grandi dimensioni
- 4. Emacs come IDE per grandi progetti C++
- 5. Enormi file OBJ nella compilazione C++ VS2008 rispetto a VS6
- 6. Utilizzo di Emacs per progetti di grandi dimensioni
- 7. Supporto file di grandi dimensioni in C++
- 8. C++ Boost Storage di grandi dimensioni
- 9. C# Oggetto di grandi dimensioni nella raccolta di medie dimensioni
- 10. Come sfruttare le CPU multicore durante la compilazione di progetti C# in una soluzione di grandi dimensioni?
- 11. C# ricerca di file di testo di grandi dimensioni
- 12. Riflessione del tempo di compilazione in C#
- 13. simulare tempo di compilazione riflessione in C++
- 14. tempo di compilazione trigonometria in C
- 15. C++ politica colpo di testa su grandi progetti (Redux)
- 16. Sovraccarico delle prestazioni di grandi dimensioni classe C#
- 17. Definire nuova costante tempo di compilazione in C# (per #if)
- 18. Asp.Net MVC5, strutturazione di progetti di grandi dimensioni. Le zone?
- 19. Computing MD5SUM di file di grandi dimensioni in C#
- 20. Grandi progetti Android: come velocizzare il processo di compilazione?
- 21. C# FileStream: dimensioni del buffer ottimali per la scrittura di file di grandi dimensioni?
- 22. Come generare numeri casuali di grandi dimensioni C
- 23. Determinazione del tipo di tempo di compilazione in C++
- 24. Migliori pratiche IoC in progetti di grandi dimensioni
- 25. C# Ritaglia e ridimensiona le immagini di grandi dimensioni
- 26. Correzione delle dimensioni del sito in FireFox rispetto a Chrome su schermi di grandi dimensioni
- 27. Serve file di grandi dimensioni con C# HttpListener
- 28. Dividere un file di grandi dimensioni in C++
- 29. Protezione Download di grandi dimensioni con C# e IIS 7
- 30. C: come gestire una struttura di grandi dimensioni?
Mi stavo anche chiedendo lo stesso. Ho compilato una piccola applicazione in C# e la compilazione è stata incredibilmente veloce rispetto a C++. – Naveen
Ho lavorato su una soluzione che conteneva oltre 40 progetti (non l'ho creata) che impiegava molto tempo (circa 1 minuto) per la compilazione su un PIV. L'aggiornamento del mio PC a un Core 2 l'ha ridotto a un tempo molto più accettabile, così come il refactoring del codice in un numero inferiore di progetti. Avere molti progetti inciderà sul tempo di compilazione dei progetti C#. – RichardOD