2010-03-16 13 views
7

AFAIK, ngen convierte MSIL en código nativo (también denominado pre-JIT), sin embargo, nunca presté demasiada atención al impacto en el rendimiento de inicio. Las aplicaciones Ngen todavía requieren .NET base class libraries (el tiempo de ejecución).¿Combina .NET dlls para ejecutar la aplicación en la máquina .NET-less?

Dado que las bibliotecas de la clase base tienen todo lo que nuestros ensamblados .NET necesitan (¿correcto?) ¿Sería posible enviar las DLL del marco con mi aplicación ngen'd para que no requiera la instalación del tiempo de ejecución? (por ejemplo, el escenario para la mayoría de las máquinas con Windows XP)

Ah, y no se moleste en mencionar Remotesoft's Salamander Linker o Xenocode's Postbuild. No son para mi (y muchos de) presupuesto actual (y parece que basta con empaquetar el marco de una enviroinment virtualizado, lo que significa grandes tamaños de descarga y los tiempos de arranque lento creo)

EDIT:
que sé ahora, NGEN no hace lo que pensé que hizo.
¿Pero es posible agrupar los archivos .NET con una aplicación, sin usar una VM?

Respuesta

2

Tenga una mirada en Microsoft .NET Native:

.NET nativo compila C# en código máquina nativo que lleva a cabo como C++. Continuará beneficiándose de la productividad y la familiaridad de .NET Framework con el excelente rendimiento del código nativo.

It will be integrated in Visual Studio 2014.

+1

Al principio pensé "ah, otro chico me envía un enlace a 'ngen' documentos", y ahora ... me estoy riendo, ¡que finalmente pensaron en esto! Como mencionan, el código iniciar y ejecutar más rápido y requerir menos memoria, ¡es simplemente increíble! Me pregunto qué tan compatible será con el código ya escrito, pero aunque no tengo tiempo ni motivación para probarlo en este momento, te mereces el tic verde porque esta es ahora una característica oficial. –

+0

@CamiloMartin gracias, me llené de entusiasmo cuando me enteré de esto también. Espero que sea muy robusto ya que se lanzará con VS 2014. –

+1

Otra cosa que me hizo exc ited es que [C# tendrá el operador '? .'] (http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/3990187-add-operator-to-c). ¡¿Cuan genial es eso?! Supongo que finalmente dejaron de tener nuevas ideas para dedicar tiempo a desarrollar "otra nueva forma de hacer paralelo/asincrónico" y ahora se ven obligados a trabajar en funciones que no tienen nada que ver con multihilo, lol. –

1

Ver How to compile a .NET application to native code? - el consenso parece ser que no es posible.

+0

Sí, sé que no es posible convertir un ensamblado .NET en código nativo (es decir, traducir .NET a nativo), pero lo que quiero es simplemente agrupar los archivos DLL de tiempo de ejecución que realmente uso (ya que la mayoría de ellos son bastante ligero, como system.dll que es poco más de 1 MB) y ejecutar mi aplicación con ellos, con la posibilidad de ejecutar más de una aplicación y/o más de una versión sin volver a empaquetar todo (qué ambos Salamander/Postbuild lo hacen). Mi principal preocupación es reducir el tamaño del marco y ser capaz de ejecutar mi código sin el marco presente en la máquina. –

2

Así no es como funciona Ngen. Solo pasa por alto el paso de compilación JIT. El archivo .ni.dll resultante solo contiene código de máquina, no los metadatos del ensamblado. Debe mantener el ensamblaje original disponible para eso. Y los ensamblados CLR y .NET Framework deben estar disponibles en la máquina de destino, lo que requiere que instale .NET.

+0

Lo siento, nunca he usado ngen. Pero Xenocode parece ejecutarse al integrar un subconjunto de infraestructura dentro de un sistema de archivos virtual, y creo que no es un SO virtual completo como el modo XP en Win 7, por lo que puede haber una manera de dejar de lado la configuración de .NET absurdamente larga y algunos ensambles redundantes (a mi solicitud) en tal proyecto. Además, la conectividad de red o ese rediseñado target-all-processorors 200+ MB de rediseño no sería necesario. –

+1

Puede orientar el .NET Client Framework, solo tiene 26 MB. Reinventar un enlazador solo es técnicamente factible. Las altas tarifas de licencia que cobran por ellos son acordes con el esfuerzo y la carga de mantenerlo compatible con las versiones de framework. Si esto es un obstáculo, la orientación de .NET es probablemente el enfoque equivocado. –

+0

Gracias por su comentario, ya que Client Framework es una buena idea, y parece que a Microsoft no le importa cómo los desarrolladores deberían lidiar con Legacy OSes + diferentes versiones de framework = (Si tuviera que inflar mi software en 26 MB sin tener el infierno de instalación del framework, sería hermoso ya = ( –

5

No puede hacer esto. Muchos componentes esenciales, como el recolector de basura, son parte del CLR (que es parte del tiempo de ejecución del framework), por lo que para ejecutar con éxito su aplicación, necesita el framework instalado.

+0

Entiendo, y realmente me daría por vencido con la idea de poder omitir toda la configuración de .NET si productos como Xenocode no existieran. Un poco obstinado de mí sé = P –

+0

@Camilo Martin, el 90% de las PC con Windows ya tienen .NET instalado y el 65% tienen .NET 3.5 SP1 instalado (http://www.hanselman.com/blog/HowManyPCsInTheWorldHaveTheNETFrameworkInstalled.aspx). Entonces, ¿por qué? molesto? –

+0

Bueno, no sé de dónde obtuvo esos números, ya que creo que menos del 90% de los usuarios * en todo el mundo * tienen .NET 2.0. En cualquier caso, solo quiero que mi software funcione incluso sin .NET (o decir sin .NET 3 .5 SP1) instalado. Esas estadísticas podrían ser de los registros de un pequeño blog visitado por personas conocedoras de la tecnología. Sin mencionar que, en mi experiencia, la mayoría de las PC corporativas/comerciales/industriales no tienen permitido instalar software, y muchas de ellas funcionan con sistemas operativos heredados = ( –

Cuestiones relacionadas