2009-10-24 22 views
7

Escribir aplicaciones nativas rápidas, con llamadas API y etc., en un lenguaje de programación multiplataforma moderno como C# sería increíble, ¿no? Por ejemplo, si desea escribir una utilidad simple para ayudar a las personas de TI a instalar cosas, que no necesitarían otros componentes, en un lenguaje de programación fácil y moderno. o si quieres escribir un juego en 3D, debería ser rápido, y JIT lo haría más lento ...C# sin .NET Framework

¿Por qué, por qué no es posible? ¿Por qué no hay lenguajes de programación modernos nativos para estas cosas?

+0

XNA se puede usar para hacer juegos en 3D y usa C#. – statenjason

+2

¿Por qué es "más lento?" –

+10

Sería increíble. De hecho, ES increíble. Puedes escribir increíbles juegos 3D con C#, puedes escribir asombrosas utilidades de instalación. ¡Entonces hazlo! ¡Ve y sé maravilloso! –

Respuesta

15

C# y .Net son código nativo. Creo que malinterpretas el JITter. No es una VM. Un programa C# se compila con código totalmente nativo antes de que se ejecute alguno de ellos.

Ahora, la parte "necesitar otros componentes" es una preocupación. Dale tiempo, sin embargo. En estos días tendrá dificultades para encontrar una instalación de Windows sin, al menos, .Net 2.0, e incluso un par de distribuciones principales de linux incluyen el modo mono de fábrica.

+1

Pensé que .NET JIT es una máquina virtual. Lo siento. –

+2

Bueno, el JIT es parte de toda la máquina virtual .net. El punto es que el código no se interpreta, se compila al código nativo sobre la marcha. –

+0

Es posible que desee verlo. http://stackoverflow.com/questions/1564348/is-the-clr-a-virtual-machine –

-3

allí es, C. C se puede utilizar para escribir cualquier aplicación, siempre !!!

+0

Entonces, ¿cómo se escribe el primer compilador de C? ;) – Nick

+1

La primera compilación de C++ se escribió en C++;) – lerosQ

3

Se ha demostrado que los programas .NET compilados se ejecutan tan rápido como C. Si lo quiere ultra delgado, escríbalo en el ensamblaje de su procesador nativo.

2

Puede usar la herramienta Microsoft NGEN.EXE para crear una imagen nativa de un ensamblado .NET. Ver MSDN NGEN documentation. Microsoft ya pensó en lo que está obteniendo aquí.

Microsoft también crea ILMERGE.EXE tool para fusionar varios archivos de ensamblaje en uno. Esto también puede estar relacionado con la optimización y la velocidad.

7

No asuma que el JIT hace las cosas más lentas. El JIT puede optimizar para la computadora exacta que ejecuta la aplicación en lugar de una computadora genérica como un 386 o Pentium. Incluso puede tomar mejores decisiones de velocidad/compromiso de memoria al generar código porque sabe exactamente lo que está disponible. Y si JIT aún hace las cosas más lentas, puedes NGENERlas para que JITting esté todo hecho de antemano.

Como prueba de ello, consideran que Quake has been ported to the CLR un par de veces, y en mis pruebas personales, los cuadros por segundo han sido más rápido cuando Quake se ejecuta en el CLR aproximadamente la mitad de las veces que se DEMO.

0

Como nota al margen, Mono tiene compilación completa por adelantado, eliminando el tiempo de ejecución. (Creo que así es como se escapan en el iPhone, que prohíbe cualquier JIT).

0

Entonces, ¿esto significa que podríamos compilar y vincular completamente un programa C# utilizando llamadas (limitadas) .NET en un EXE independiente que podría ¿Se ejecuta sin .NET en absoluto?

FYI: La comprobación de un servidor de 5000 servidores reveló unos 200 sin incluso .NET 2.0.

Esto causa problemas para el código que debe ejecutarse en "todas las instancias de Windows". Con .NET 4.0+ que no incluye 2.0, esto empeora ya que las máquinas nuevas y antiguas de Windows podrían no tener el 'correcto' .NET