versiones utiliza usos sharp que programacion para lenguaje ejemplos comandos caracteristicas antecedentes c# .net performance programming-languages

utiliza - lenguaje de programacion c# ejemplos



¿Por qué los lenguajes.net varían en rendimiento? (5)

He oído que C ++ .NET es el más rápido, C # es el siguiente, seguido de VB .NET y los lenguajes como Iron-Python y Boo son los últimos en términos de rendimiento. Si todos los lenguajes .NET se compilan en un byte-código intermedio que es el mismo, ¿por qué la diferencia en el rendimiento?

Es comprensible para Boo y Python, ya que todos los tipos deben evaluarse en tiempo de ejecución. Pero ¿por qué la diferencia entre lenguajes como C ++ y C #?


Python se comporta peor porque se interpreta, no se compila. En lugar de convertirse a CIL (lenguaje intermedio común) antes de ejecutarse, se convierte en tiempo de ejecución, lo que obviamente incurrirá en una sobrecarga de rendimiento.

Además, dado que IronPython es de tipo dinámico, se pueden hacer menos optimizaciones en comparación con los lenguajes de tipo estático (que C ++, C # y, a pesar de la sintaxis de Pythonesque, Boo también lo son).

También debe considerar la cantidad de esfuerzo que se dedica a realizar optimizaciones para cada implementación. C # y C ++. NET tienen enormes equipos en Microsoft que trabajan para que sus compiladores produzcan el código de bytes más rápido posible. IronPython y Boo son proyectos voluntarios que no tienen tanta mano de obra o recursos, por lo que no obtendrán optimizaciones tan rápido como algo financiado por MS.

Esencialmente, las características del idioma pueden tener costos de rendimiento / memoria tanto en tiempo de compilación como en tiempo de ejecución. Es por eso que los lenguajes .NET varían en rendimiento; Porque varían en características.


Seguir los instintos de C ++ en C ++ / cli conducirá a un código más rápido que el uso de los instintos de C # en C #, por ejemplo, cuando se realiza un bucle a través de los datos. Claro, PUEDES usar código C # inseguro para lograr lo mismo y PUEDES usar arreglos en C ++ / cli, pero si en cambio sigues paradigmas de lenguaje bastante estándar, puede haber una gran diferencia de rendimiento en las circunstancias correctas, por ejemplo, 10 a 1 en una bucle estrecho con un montón de acceso a los datos.

Paradigma de C ++ en C ++ / cli

char * position = start; char * end = position + data_count; while ( position < start ) { { do stuff with the data ) position ++; }

Paradigma de C #

for ( int i = 0 ; i < count; i ++ ) { { do stuff with data[i] ) }

Utilice la ventana de desmontaje y verá cuán diferentes son estas compilaciones.

Además de estos problemas de paradigma de programación, puede haber problemas reales del compilador, pero no sé nada sobre ellos.


Tenga en cuenta que, a diferencia de C # o VB.Net, no todos los programas C ++ creados con Visual Studio .Net utilizan el marco .Net. También puedes crear programas C ++ directamente con él, que son bastante rápidos.


Todas las respuestas hasta ahora han confundido a C ++ y "C ++ .Net" (que en realidad ahora se llama C++/CLI ); estos son dos idiomas completamente separados.

C++ se compila al código de máquina nativo. C ++ / CLI se compila a bytecode CIL (.Net). Debido a esto, los programas C ++ tienden a ser un poco más rápidos que el código C ++ / CLI. C ++ tiene alrededor de 30 años y es ampliamente utilizado en el mundo de la programación. C ++ / CLI, por otro lado, tiene aproximadamente 10 años y no se utiliza ampliamente. Su objetivo principal es hacer que la traducción de programas en C ++ a .Net sea mucho más fácil: pasar de C ++ a C ++ / CLI es mucho menos trabajo que ir de C ++ a C #.

Hay otra confusión en uno de sus comentarios anteriores: entre VB6 y VB.Net. VB6 era el lenguaje antiguo de Microsoft VB, ahora en desuso. Se compiló según el código de máquina nativo, aunque existía la creencia generalizada (en su mayor parte de verdad) de que era más lento que C ++. VB.Net es el nuevo lenguaje de VB de Microsoft, compilado para CIL.

Ahora: el rendimiento. C ++ generalmente va a ser el más rápido, simplemente porque está compilado a código de máquina nativo, y porque la gente ha estado trabajando en la optimización de sus compiladores durante 30 años. Esto es lo que usualmente verás en juegos de video y otras aplicaciones de alto rendimiento, pero, en comparación con otros idiomas, es un poco difícil trabajar con ellos.

Entre los lenguajes .Net, los dos grandes, C # y VB.Net, son casi todos iguales en cuanto a rendimiento. Aunque no tengo puntos de referencia para demostrar esto, supongo que C ++ / CLI es en realidad un poco más lento , simplemente porque Microsoft no ha puesto tanto énfasis en ese lenguaje, por lo que probablemente no haya tantos programadores trabajando para optimizar su compilador.

IronPython, ya que no tiene un equipo de tiempo completo trabajando para optimizar su compilador, probablemente sea el más lento. También se ejecuta sobre el DLR , que es solo otra capa de direccionamiento indirecto. Además, otra respuesta afirma que se interpreta, lo que sería un asesino de rendimiento.


A veces, las operaciones que parecen equivalentes pueden implicar un poco de trabajo adicional (realizado automáticamente por el compilador) para cumplir con los requisitos de idioma. Por ejemplo, en VB, hay peculiaridades, como cuando se detecta una excepción, se actualiza el objeto Err ; siempre que haga casi cualquier cosa con una variable de Object , llama a una función que hace una copia en caso de que sea un tipo de valor.