Eu tenho trabalhado em algum código MUITO intensivo de cálculo em (suspiro!) C #.
Estou construindo uma implementação GPGPU do FDTD para modelagem óptica. Em um pequeno cluster (128 processadores), muitas de nossas simulações levam semanas para serem executadas. As implementações de GPU, no entanto, tendem a rodar cerca de 50x mais rapidamente - e isso é uma placa NVidia de nível de consumidor. Agora temos um servidor com duas placas de processador duplo GTX295 (várias centenas de núcleos) e, em breve, receberemos alguns Teslas.
Como isso se aplica ao seu idioma? Da mesma forma que o código C ++ FDTD que estávamos usando antes era vinculado à CPU, eles são vinculados à GPU, portanto a diferença ( muito pequena) de potência entre código gerenciado e código nativo nunca entra em jogo. O aplicativo C # atua como um condutor - carregando kernels OpenCL, transmitindo dados de e para as GPUs, fornecendo a interface do usuário, relatórios etc. - todas as tarefas que são chatas no C ++.
No passado, a diferença de desempenho entre código gerenciado e não gerenciado era significativa o suficiente para às vezes valer a pena aturar o terrível modelo de objetos do C ++ para obter a porcentagem extra de velocidade. Atualmente, o custo de desenvolvimento de C ++ vs C # supera em muito os benefícios para a maioria dos aplicativos.
Além disso, a maior parte de sua diferença de desempenho não virá da sua escolha de idioma, mas da habilidade do seu desenvolvedor. Algumas semanas atrás, movi uma operação de divisão única de dentro de um loop tripla aninhada (3D array atravessar), que reduziu o tempo de execução para um determinado domínio computacional em 15%. Isso é resultado da arquitetura do processador: a divisão é lenta, que é uma daquelas faces que você só precisa entender em algum lugar.