Warum gibt AppDomain.CurrentDomain.GetAssemblies () unter bestimmten Bedingungen keine abhängigen Assemblys in Global.asax zurück?

BEARBEITEN: Dies hatte zuvor den Titel "Unterschiedliches App Init-Verhalten zwischen IIS-Neustart und Anwendungsinitialisierung". Ich habe den Titel geändert, um die Frage aus IIS / Anwendungsinitialisierung zu erweitern, da sich das beobachtete Verhalten auf beziehtAppDomain.CurrentDomain.GetAssemblies();

Ich verwende das IIS-Modul zur Anwendungsinitialisierung, um einen asmx-Wed-Dienst aufzuwärmen.

Ich habe einen Aufwärmcode implementiert, um die erfolgreiche Initialisierung der App-Anwendung sicherzustellen. JITs asmx-Dienst im Global.asax Application_Start-Ereignis. Dabei wird System.Runtime.CompilerServices.RuntimeHelpers.PrepareMethod () verwendet, um alle Assemblys in der Anwendung zu durchlaufen (dabei werden auch alle Assemblyabhängigkeiten erfasst), um sicherzustellen, dass der erste Aufruf des Service so schnell wie möglich erfolgt.

Wenn ich dieses Verhalten mithilfe von "net stop w3svc & net start w3svc" beobachte, kann ich (über die Protokollierung) feststellen, dass ALLE Assemblys JIT'ted sind und der erste Aufruf des Dienstes wie erwartet schnell erfolgt.

Wenn der Anwendungspool jedoch nach dem konfigurierten Zeitplan (03:00:00) automatisch wiederverwendet wird, werden im Protokoll nur die Assemblys angezeigt, auf die direkt verwiesen wird, und nicht die Abhängigkeiten, die sich ebenfalls im Ordner befinden.

Dies führt zu einem inakzeptablen Overhead beim ersten Aufruf des Dienstes.

Der App Init verhält sich im Übrigen genauso wie erwartet. Warum kompiliert der IIS-Neustart des Anwendungspools nur JIT die Assemblys, auf die direkt verwiesen wird, und nicht die Abhängigkeiten?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage