Я уже давно задавался вопросом об этой проблеме.
Конечно, в С# есть вещи, которые не оптимизированы для скорости, поэтому использование этих объектов или языковых настроек (например, LinQ) может привести к тому, что код будет медленнее.
Но если вы не используете какие-либо из этих настроек, просто сравните одни и те же фрагменты кода на С# и С++ (легко перевести один в другой). Будет ли это действительно намного медленнее?
Я видел сравнения, которые показывают, что С# может быть даже быстрее в некоторых случаях, потому что теоретически JIT-компилятор должен оптимизировать код в режиме реального времени и получать лучшие результаты:
Управляемый или неуправляемый?
Мы должны помнить, что компилятор JIT компилирует код в реальном времени, но одностраничные служебные данные, один и тот же код (после того, как он был достигнут и скомпилирован) не нужно компилировать снова во время выполнения.
GC не добавляет слишком много накладных расходов, если вы не создаете и не уничтожаете тысячи объектов (например, используя String вместо StringBuilder). И выполнение этого в С++ также было бы дорогостоящим.
Еще один момент, который я хочу затронуть, - это лучшая связь между DLL, представленными в .NET. Платформа .Net обменивается данными гораздо лучше, чем управляемые COM-библиотеки DLL.
Я не вижу врожденной причины, по которой язык должен быть медленнее, и я действительно не думаю, что С# медленнее С++ (как из опыта, так и из-за отсутствия хорошего объяснения).
Итак, будет ли фрагмент того же кода, написанный на С#, медленнее, чем тот же код в С++?
Если да, то ПОЧЕМУ?
Некоторая другая ссылка (о которой немного говорят об этом, но без объяснения причин WHY):