significado que net msil microsoft language intermediate dofus c# vb.net cil

msil - ¿Es C#más rápido que VB.NET?



clr net (6)

Asegúrate de que los programas sean realmente idénticos. Por ejemplo, dependiendo de las opciones, estas dos líneas son realmente muy diferentes:

Dim x = "some string"

.

string x = "some string";

Para que coincida con el código C #, el VB debe tener este aspecto:

Dim x As String = "some string"

Pensarías que los dos son iguales.

Pero tal vez sea el compilador que Microsoft ha utilizado, pero me he dado cuenta de que al compilar dos programas muy pequeños, lógica idéntica. VB.NET usa más instrucciones de IL.

¿Es cierto que c # debe ser más rápido, aunque solo sea porque su compilador es más inteligente?


C # coincide más cerca de IL que VB.NET

VB.NET a veces hace muchas cosas detrás de escena. Como On Error Resume Next, que escribe un try catch para cada instrucción

Pero, en general, ambos tienen las mismas características y el mismo rendimiento.

Puede abrir su código en Reflector y ver como código C #. Comprenda si el código C # era lo que esperaba


Esto es realmente difícil de responder definitivamente con la cantidad limitada de información disponible. Ayudaría mucho si proporcionara el código de ambas muestras y las opciones de compilación utilizadas.

Sin embargo, para responder la pregunta, ningún C # no es inherentemente más rápido. Ambos idiomas generan IL y se ejecutan en CLR. Para la mayoría de las características, incluso generan la misma IL. Existen diferencias para algunas características similares, pero rara vez se suman a cambios de rendimiento significativos.

VB puede aparecer más lento si se encuentra con algunas de las diferencias sutiles en los idiomas y el entorno. Un par de ejemplos comunes son ...

  • Muchos entornos predeterminan las operaciones de enteros verificados para VB.Net pero no C #
  • Cuestiones de codificación sutiles pueden llevar a un enlace tardío donde parece ser vinculante
  • El switch creyente y Select tienen la misma semántica

Una vez que se eliminan, los idiomas funcionan con perfiles de rendimiento muy similares.


La respuesta es sí y no. Realmente depende de a qué característica específica te estás refiriendo. Del mismo modo, hay áreas donde VB se ejecuta más rápido. Puedo dar un ejemplo de cada uno.

Este código en VB ...

For i As Integer = 0 To Convert.ToInt32(Math.Pow(10, 8)) Next

... es aproximadamente 100 veces más rápido que este código en C #.

for (int i = 0; i <= Convert.ToInt32(Math.Pow(10, 8)); i++) { }

No es que el compilador de VB sea mejor generando código que se ejecute for bucles más rápido. Es que VB calcula el lazo enlazado una vez mientras que C # calcula la condición del ciclo en cada iteración. Es solo una diferencia fundamental en la forma en que se pretendía utilizar los idiomas.

Este código es C # ...

int value = 0; for (int i = 0; i <= NUM_ITERATIONS; i++) { value += 1; }

... es ligeramente más rápido que el equivalente en VB.

Dim value As Integer = 0 For i As Integer = 0 To NUM_ITERATIONS value += 1 Next

La razón en este caso es que el comportamiento predeterminado para VB es realizar una verificación de desbordamiento, mientras que C # no.

Estoy seguro de que hay otra diferencia en los idiomas que muestran sesgos de rendimiento similares. Sin embargo, ambos lenguajes se crean sobre el CLR y ambos compilan a la misma IL. Así que hacer afirmaciones generales como "Idioma X es más rápido que el lenguaje Y" sin agregar la importante cláusula "en situación Z" que califica son simplemente incorrectas.


No he hecho ninguna prueba, pero creo que la velocidad sería la misma. Si hay algo, seleccione el estilo de codificación y la sintaxis.