Я работал над ОЧЕНЬ интенсивным кодом на C #.
Я строю реализацию FDTD для оптического моделирования в GPGPU . На небольшом кластере (128 процессоров) многим нашим симуляциям требуются недели. Реализации GPU, однако, имеют тенденцию работать примерно в 50 раз быстрее - и это на плате NVidia потребительского уровня. Теперь у нас есть сервер с двумя двухпроцессорными картами GTX295 (несколько сотен ядер), и мы скоро получим немного Teslas.
Какое это имеет отношение к вашему языку? Так же, как код FDTD C ++, который мы использовали ранее, был привязан к процессору, он привязан к графическому процессору, поэтому ( очень небольшая) разница в лошадиных силах управляемого и нативного кода никогда не вступает в игру. Приложение C # действует как проводник - загружая ядра OpenCL, передавая данные в и из графических процессоров, обеспечивая пользовательский интерфейс, отчеты и т. Д. - все задачи, которые являются проблемой в C ++.
В прошлые годы разница в производительности между управляемым и неуправляемым кодом была настолько значительной, что иногда стоило мириться с ужасной объектной моделью C ++, чтобы получить дополнительные несколько процентов скорости. В наши дни стоимость разработки C ++ против C # намного превышает преимущества большинства приложений.
Кроме того, большая часть различий в производительности будет зависеть не от выбора языка, а от мастерства вашего разработчика. Несколько недель назад я переместил одну операцию деления изнутри цикла с тройным вложением (обход трехмерного массива), что сократило время выполнения для данной вычислительной области на 15%. Это результат архитектуры процессора: медленное деление, которое является одним из тех лиц, которые вам просто нужно где-то заметить.