2016-06-09 4 views
0

Ich habe einige Probleme mit Reflexion:C# Reflection CompileAssemblyFromSource langsam

In meinem Code ich dynamisch C# Code aus der Datenbank laden, kompilieren und einen Gegenstand aus dieser Bibliothek laden. All das funktioniert, aber die Kompilation von CompileAssemblyFromSource ist sehr langsam (ca. 60s).

Ich habe versucht, die gleichen C# -Code mit Visual Studio 2015 und der Aufbauphase zu kompilieren dauerte weniger als 1 s ...

Was ist los? Ist CompileAssemblyFromSource so langsam?

+0

.Net-Version, die Sie verwenden? Ist das 60s-Timing auch auf dem gleichen Computer wie das VisualStudio-Timing? Was ist das Ergebnis, wenn Sie CompileAssemblyFromSource in einem Dummy-Projekt auf Ihrem lokalen Rechner verwenden? – tolanj

+0

.Net 4.5.1. Visual Studio Timing ist auf meinem Entwicklungscomputer. Keine Entwicklungsumgebung auf meinem Server. –

+0

"aber die Kompilation von CompileAssemblyFromSource ist sehr, sehr langsam (ca. 60s)" also ist das ein Timing auf dem Server. CompileAssemblyFromSource ist nicht von Natur aus langsam, also gibt es mehrere Möglichkeiten, eine davon ist, dass der _server_ aus irgendeinem Grund langsam kompiliert, es gibt viele andere. Um das Problem zu finden, sage ich auf Ihrer Entwicklungsmaschine kompilieren Sie den Code mit CompileAssemblyFromSource in so nah wie möglich, wie es auf dem Server und Zeit getan wird. und poste die Ergebnisse. Sind Sie sicher, dass Ihre 60s Kompilierzeit ist und nicht (sagen wir) aus DB + Kompilierzeit extrahiert? – tolanj

Antwort

0

Code wird im TEMP-Verzeichnis generiert, unabhängig davon, ob GenerateInMemory auf true festgelegt ist. Wenn Sie die Tempfiles-Eigenschaft in CompilerParameters auf ein nicht vorhandenes Laufwerk/Verzeichnis setzen, geschieht dies nicht:

 parameters.TempFiles = new TempFileCollection(@"B:\NonExistingDirectory"); 
+0

Ich habe genau das gleiche Problem und dieser Vorschlag hat es nicht für mich gelöst –