Kann eine .NET-Anwendung zu nativ kompiliert werden?

8

Sie fragen sich nur, ob eine .NET-Anwendung im Voraus auf nativen Maschinencode kompiliert werden kann? Ich habe nicht vor, das zu tun, selbst wenn ich es könnte; Ich bin nur neugierig.

Danke

    
Nathan W 10.10.2008, 00:55
quelle

4 Antworten

11

Sie können NGen verwenden, um es im Voraus zu kompilieren, aber das hängt immer noch vom .NET-Framework ab. Remotesoft Salamander (eine kommerzielle App) kann eine rahmenlose App machen.

    
Cody Brocious 10.10.2008, 00:57
quelle
5

Sie können IL in native Binärdateien kompilieren. Es gibt Produkte, die es tun.

Die größere Frage ist, sollten Sie ...

Wenn Sie alle Punktnetzabhängigkeiten entfernen möchten, um ohne Punktnetz zu laufen

Was diese Produkte tun, ist im Wesentlichen das Vorkompilieren auf die Maschinenebene (normalerweise x86) und dann das statische Einbinden aller benötigten Bibliotheken in Ihrer exe. Das führt normalerweise zu einer RIESIGEN exe. Und, noch wichtiger, Sie haben jetzt nicht wirklich die Laufzeit auf Ihrem Zielrechner. Sie haben einen Teil der Laufzeit, den der native Compiler einbinden wollte.

Wenn Sie nur eine schnellere JIT-Zeit erhalten möchten

Sie können NGen auch verwenden, um es in eine native Binärdatei zu kompilieren, aber Sie haben immer noch alle Abhängigkeiten von dot net. Zielrechner benötigen noch das Framework usw.

Aber, wenn Sie ngen, verlieren Sie die Fähigkeit für die App, bis zu 64 Bit automatisch zu fördern. Wenn Ihre App vorkompiliert ist, müssen Sie einen Modus erzwingen. Wenn ein Benutzer auf einer 64-Bit-Maschine läuft, wäre Ihr IL-Code befördert worden (es sei denn, Sie markieren ihn nicht).

Die JIT-Zeit ist nicht der größte Engpass in den meisten Apps. Es ist das Laden der Framework-Bibliotheken und anderer damit zusammenhängender Anforderungen.

Wenn Sie es wirklich brauchen, können Sie in einer Setup-App den aktuellen Benutzerzielcomputer abrufen.

Ich habe vor kurzem auch erfahren, dass man eine App nicht NGEN und erwarten kann, dass sie die CPU ausnutzt, wie man es mit dem JIT kann. Wenn Sie laufen, optimiert NGEN immer die Ausgabe für einen PentiumPro aus irgendeinem Grund, und wird Dinge wie SSE, SSE2 usw. nicht nutzen. Also würde ich sagen, dass NGEN als ein vernünftiger Anwendungsfall entfernt wird.

    
Jason Short 10.10.2008 01:12
quelle
1

ngen kann verwendet werden, um ein Bild vorzuspielen Daher ist es in nativer Form auf der Festplatte verfügbar, um die Startzeit der Anwendung zu reduzieren.

    
Rob Walker 10.10.2008 00:57
quelle
1

Mono hat einen AOT-Compiler , der nativen Code ausgeben kann.

    
Paul Dixon 19.01.2010 07:33
quelle