Selbst kompilierte Roslyn-Build-Leistung: Nicht so schnell wie ursprünglich die Roslyn-Version

8

Was mache ich in einem Satz

Überprüfen Sie den Zweig Update-1 aus dem Roslyn-GitHub-Repository , erstellen Sie die Datei csc.exe und kompilieren Sie eine zufällige Datei Lösung mit der csc.exe Version, die ich gerade selbst gebaut habe.

Erwartetes Ergebnis

Ich erwarte, dass die Leistung mit der ursprünglichen Roslyn-Version vergleichbar ist, die mit VS 2015 Update 1 geliefert wurde und sich im Pfad C:\Program Files (x86)\MSBuild.0\Bin

befindet

Tatsächliches Ergebnis

Die Build-Leistung der Roslyn-Version, die ich selbst gebaut habe, ist im Vergleich zum Original deutlich schlechter. In der Lösung, die ich in meinen Tests verwendet habe: ungefähr 30 Sekunden gegenüber 65 Sekunden.

Meine Prozedur im Detail

  • Klonte Ссылка und checkte den Zweig update-1
  • aus
  • Gebaut Roslyn mit Release configuration (versucht mit beiden, Mixed Configuration sowie x64 für die Lösungsplattform.)
  • Um eine Testlösung zu kompilieren, habe ich alle Projektdateien so geändert, dass sie einen bestimmten Speicherort für den csc-Pfad verwenden:

    <CscToolPath>C:\Path\To\Output\Location\Of\Roslyn\Binaries\</CscToolPath>

  • Zu Testzwecken baue ich die Testlösung von der Kommandozeile mit

    MSBuild.exe /t:Rebuild /m:1 /verbosity:m MySolutionName.sln

  • Ich mache derzeit auch eine Reinigung vor:

    MSBuild.exe /t:Clean /m:1 /verbosity:m MySolutionName.sln

  • Um den ursprünglichen mit VS 2015 Update 1 gelieferten Compiler zu testen, ändere ich die Konfiguration in den Projektdateien in:

    <CscToolPath>C:\Program Files (x86)\MSBuild.0\Bin\</CscToolPath>

Fragen

  • Was kann ich tun, um eine ähnliche Leistung mit meiner selbst kompilierten Roslyn-Version zu erreichen, wie mit den ursprünglich verschickten Roslyn-Dlls?
  • Gibt es noch weitere Dinge (wie Optimierungen etc.), die man beim Aufbau von Roslyn selbst beachten sollte?
Merrit 18.01.2016, 11:09
quelle

2 Antworten

6

Der größte Unterschied besteht darin, dass der von Visual Studio in NGEN installierte offizielle Compiler als Teil der Installation kompiliert wurde.

Aber selbst wenn Sie NGEN verwenden, werden Sie nicht exakt die gleichen Ergebnisse erzielen, da Microsoft profilgestützte Trainingsdaten zur Unterstützung partieller NGEN verwendet, um ein gutes Gleichgewicht zwischen binärer Größe und JIT-Zeit zu erhalten das öffentliche Repo (ähnlich der Unterschrift mit dem offiziellen privaten Microsoft-Schlüssel).

    
Kevin Pilch 18.01.2016, 18:26
quelle
1

Zusätzlich zu Kevins Antwort, die völlig korrekt ist, hier ein paar weitere Details zum Signieren / NGEN-Kompilieren von Roslyn-Binärdateien, da dies für andere Leute interessant sein könnte.

  • Um die Binärdateien zu kompilieren, müssen sie einen starken Namen haben, was bedeutet, dass sie signiert werden müssen
  • Normalerweise werden Roslyn-Binärdateien mit dem privaten Schlüssel von Microsoft verzögert signiert, wie Kevin auch darauf hingewiesen hat.
  • Also müssen wir unser eigenes Schlüsselpaar zum Signieren verwenden
  • Die entsprechende Konfiguration finden Sie im Roslyn Repo in der Datei build \ Targets \ VSL.Imports.targets
  • Zu Testzwecken können wir dann diesen Abschnitt ersetzen:
%Vor%

mit zum Beispiel:

%Vor%
  • ... Verwenden Sie Ihre eigene Schlüsseldatei, den öffentlichen Schlüssel sowie das öffentliche Schlüsseltoken.
  • Die Schlüsseldatei kann in Visual Studio oder mit Hilfe der sn.exe Werkzeug.
  • sn.exe kann auch zum Exportieren des öffentlichen Schlüssels sowie zum Extrahieren des öffentlichen Schlüsseltokens verwendet werden (z. B. von einer Assembly, die Sie testen könnten - mit dem Schlüssel signieren)
  • Dann kann NGEN wie folgt aufgerufen werden:

    ngen.exe install "C:\path\to\Roslyn\Release\csc.exe"

(zum Beispiel in C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe )

    
Merrit 23.01.2016 10:21
quelle

Tags und Links