2008-10-10 17 views
8

Fragen Sie 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.Kann eine .NET-Anwendung zu nativen kompiliert werden?

Dank

+1

@Cody Danke für die Rechtschreibkorrekturen, die mich lehren, nicht zu lesen lesen, bevor ich Enter drücken. –

Antwort

11

Sie können NGen verwenden Sie es vor der Zeit zu kompilieren, aber das hängt immer noch auf dem .NET-Framework. Remotesoft's Salamander (eine kommerzielle App) kann eine rahmenlose App erstellen.

1

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

+0

BTW: Sind ngen-kompilierte Anwendungen langsamer als Standard-.net (trotz Startzeit)? Ich dachte, der JIT-Compiler könnte zur Laufzeit besonders mit Lambda-Ausdrücken viel Optimierung vornehmen. – Dario

5

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

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

Wenn Sie alle Netto-Abhängigkeiten ohne dot net

Grundsätzlich laufen Punkt zu entfernen, was diese Produkte tun, zu der Maschinenhöhe ist Vorkompilieren nach unten (x86 normalerweise) und dann statisch alle erforderlichen Bibliotheken in Ihrer exe einschließen. 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 wollen einfach nur eine schnellere JIT Zeit bekommen

Sie können auch NGen verwenden Sie es zu einem nativen binären zu kompilieren, aber immer noch die Abhängigkeiten alle auf dot net haben. Zielmaschinen brauchen noch das Framework, etc.

Aber wenn Sie ngen, verlieren Sie die Fähigkeit für die App, automatisch bis zu 64 Bit 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ürde Ihr IL-Code befördert werden (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 innerhalb einer Setup-App den aktuellen Benutzer Zielcomputer abrufen.

Ich habe auch gerade erst gelernt, dass Sie nicht eine App NGEN und erwarten können, dass sie die CPU wie Sie mit dem JIT nutzen können. 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.

1

Mono hat eine vorzeitige Zeit (AOT) compiler, die nativen Code ausgeben kann.