Я часто слышу, как люди хвалят скорость компиляции C#. До сих пор я только сделал несколько крошечных приложений, и я действительно заметил, что компиляция была очень быстрой. Тем не менее, мне было интересно, если это все еще сохраняется для больших приложений. Большие проекты C# компилируются быстрее, чем проекты на C++ аналогичного размера?C# время компиляции для больших проектов (по сравнению с C++)
ответ
Насколько я могу судить по собственному опыту, да, C# компилируется намного быстрее, чем проекты на C++. Даже для больших приложений.
Это можно объяснить тем, что C# менее сложна как язык, чем C++, и что C# переводится в IL (который может быть оптимизирован и переведен позже на машинный код), а C++ сразу переводится на машинный язык ,
Да, C# обычно компилируется намного быстрее. Не всегда достаточно быстро. Моя самая большая C# codebase с, возможно, миллионом строк кода с большим количеством проектов занимала около часа, чтобы скомпилировать. Но я подозреваю, что большая часть этого времени связана с плохой системой построения визуальных студий. Время компиляции для C++, с другой стороны, обычно намного дольше, но также значительно зависит от того, как вы организуете свой код. Плохая обработка зависимостей заголовков может легко увеличить время компиляции с несколькими порядками.
+1 для комментариев по плохой обработке файлов заголовков - мы выбросили от 1 часа до 8 минут на нашем большом проекте C++, отсортировав файлы заголовков! –
C++ так медленно компилируется, что файлы заголовков должны быть перечитаны и повторно обработаны каждый раз, когда они включены. Из-за того, как работает «#defines», компилятору очень сложно автоматически предварительно скомпилировать все файлы заголовков. (Modula-2 сделал намного лучшую работу). Наличие 100-х заголовков, прочитанных для каждого файла C++, который компилируется, является нормальным для многих проектов на C++.
Иногда инкрементные компиляции C++ могут быть намного быстрее, чем C#. Если у вас есть все ваши файлы заголовков C++ (и дизайн) в очень хорошем состоянии (см. Такие книги, как Large-Scale C++ Software Design, Effective C++). Вы можете внести изменения в реализацию класса, который используется большинством систем, и иметь только одну DLL-перекомпилировать ,
Поскольку C# не имеет отдельных файлов заголовков всякий раз, когда вы меняете имплантацию класса, все виды использования класса перекомпилируются, даже если открытый интерфейс класса не изменился. Это можно уменьшить на C#, используя «программирование на основе интерфейса» и «инъекцию зависимостей» и т. Д. Но это все еще боль.
Однако в целом я нахожу, что C# компилируется достаточно быстро, но большие проекты на C++ настолько сглажены, что я не хочу добавлять методы к «базовому классу» из-за времени перестройки.
Наличие большого количества проектов Visual Studio с несколькими классами в каждом может замедлить работу C#. Объединение связанных проектов вместе, а затем «доверие» к разработчикам не использовать класс, закрытый для пространства имен, иногда может принести большую пользу. (nDepends можно использовать, чтобы проверить людей, нарушающих правила)
(При попытке ускорить компиляцию на C++ я нашел FileMon очень полезным. Один проект, над которым я работал, STL был добавлен в файл заголовка, а сборка получена намного медленнее, просто добавив STL в предварительно скомпилированный файл заголовка, сделав большую разницу! Поэтому отслеживайте время сборки и исследуйте, когда он становится медленнее)
+1 для указания проблемы C# с зависимыми проектами, нуждающимися в перестройке, когда вы только меняете реализацию библиотеки. C++ лучше справляется с четким разделением интерфейса с реализацией, что фактически делает его более подходящим для крупных проектов. Включение зависимостей является лишь обходным путем, поскольку он заставляет всю кодовую базу переписываться соответствующим образом, то есть она инвазивная. –
Это также мое наблюдение, что C# значительно быстрее компилируется, чем C++. Одна из основных причин - это, конечно, шаблоны, которые не обязательно должны быть в заголовках на C#, так как нет заголовков. Но интенсивное использование шаблонов (в основном, любой современной библиотеки C++, такой как Boost) убивает время компиляции на C++.
- 1. Поиск помощи по компиляции больших проектов
- 2. Политика заголовка C++ для больших проектов (сокращение)
- 3. Как объединить компоненты больших проектов на C++?
- 4. Сервер Mac для компиляции проектов obj-c?
- 5. Указатель C++ по сравнению с целочисленной ошибкой компиляции
- 6. Как вы сокращаете время компиляции и время связывания для проектов Visual C++ (родной C++)?
- 7. Неуправляемый C# по сравнению с C++
- 8. C++/CLI: Преимущества по сравнению с C#
- 9. C# дженериков по сравнению с шаблонами C++
- 10. Emacs как IDE для больших проектов на C++
- 11. C# Медленное время отклика с HttpClient по сравнению с HttpWebRequest
- 12. Концепция собственности C++ по сравнению с .net
- 13. Использование Emacs для больших больших проектов
- 14. Учебник Emacs для больших проектов
- 15. Изображения C# Display (во время выполнения по сравнению с загрузкой)
- 16. GWT для больших проектов?
- 17. C/C++ по сравнению с Java/C# в высокопроизводительных приложениях
- 18. CakePHP для больших проектов
- 19. Поведение фейсов PHP по сравнению с C
- 20. Сборка по сравнению с кодом C
- 21. Инициализация C++ std :: bitset во время компиляции
- 22. struct and typedef в C по сравнению с C++
- 23. Определить время компиляции функции C?
- 24. C++ по сравнению с строковыми датами
- 25. C# Массивы по сравнению с потоками
- 26. C++ - структура по сравнению с классом
- 27. Создание объекта Java по сравнению с C#
- 28. Потоки C++ по сравнению с потоками .NET?
- 29. Как улучшить время компиляции Visual C++?
- 30. Деструкторы в C++ (по сравнению с java)
Мне также было интересно то же самое. Я собрал небольшое приложение на C#, и компиляция была удивительно быстрой по сравнению с C++. – Naveen
Я работал над решением, в котором было более 40 проектов (я его не создал), которые занимали много времени (около 1 минуты) для компиляции на PIV. Обновление моего ПК до Core 2 сократило его до гораздо более приемлемого времени, равно как и реорганизация кода на меньшее количество проектов. Наличие большого количества проектов повлияет на время компиляции проектов C#. – RichardOD