2009-06-03 4 views
3

Wenn ich eine 1000 asp.net Websites mit jeweils 30 DLLs in ihren/bin Ordnern hatte.Geschwindigkeitssteigerung durch Verwendung des Global Assembly Cache

Daher 30.000 DLLs.

Würden die Websites/Webserver/Computer schneller laufen, wenn ich einen Satz der DLLs im globalen Assemblycache registriert hätte und jeder Standort die DLLs im GAC verwendet hätte?

z.B. Würden die Websites insgesamt weniger Speicher verbrauchen?

Antwort

7

Obwohl Assemblys in der GAC sind, werden sie dennoch von dort getrennt in den Speicher geladen, um die Isolation zu gewährleisten. Mit anderen Worten, nur weil Assemblys im GAC sind, bedeutet dies nicht, dass diese Kopien über AppDomains verteilt werden. Ich glaube, dass mscorlib (und möglicherweise ein paar der BCL-Assemblies) kann über AppDomains geteilt werden, aber alle Assemblys Sie oder ich schreibe nicht.

Dies ist jedoch eine gute Sache: Betrachten Sie die Auswirkungen des Typs Cache, der über AppDomains verteilt wird.

+2

Baugruppen können neutral Verwendung Loader als Domäne geladen. Ich bin mir nicht sicher, was das bedeutet, aber ich denke nicht, dass es etwas mit dem Teilen von Status über AppDomains zu tun hat. – Josh

+0

Richtig, aber dieses Attribut ist nur am Eingangspunkt einer ausführbaren Datei gültig, was bedeutet, dass es keine Auswirkungen auf Bibliotheken hat. –

+0

Ahh guter Punkt. Aber sicher hat ASP.NET den CLR-Host so konfiguriert, dass er domänenneutral geladen werden kann? Andernfalls müsste jede Organisation mit einer gemeinsamen DLL, die in mehreren Projekten verwendet wird, für jede Anwendungsdomäne eine separate Kopie dieser DLL in den Speicher laden, oder? Offensichtlich benötigt jede App-Domäne ihren eigenen Status, aber würde der Code selbst zweimal geladen werden? – Josh

1

Eigentlich wäre das viel schneller, besonders wenn sie auch NGEN sind. Wenn Sie NGEN eingeben, ohne sie in den globalen Assemblycache zu verschieben, verlangsamen Sie dies, da die CLR die Assembly überprüfen muss, um sicherzustellen, dass sie mit dem nativen Image übereinstimmt. Die CLR überspringt diese Prüfung für GAC-Baugruppen und lädt und verwendet das native Abbild.

Es gibt auch Speichervorteile für NGEN-Baugruppen, da sie Codepages teilen können.

Sie könnten auch in Betracht ziehen, die Basisadressen der DLLs zu optimieren, denn wenn sie alle den Standard verwenden, muss Windows 30.000 Mal rebasieren!

Hier ist ein großer Artikel über Leistungsvorteile von NGEN.

http://msdn.microsoft.com/en-us/magazine/cc163610.aspx

+0

Hmm ... ja, laufen sie durch NGEN und möglicherweise ihre Basis-Adressen ändern könnte helfen - aber nur 1'000 DLLs in den GAC allein macht keinen Unterschied, soweit ich das beurteilen kann –

+0

Ich denke, die Leistungsverbesserung für GAC'd-Assemblies hat damit zu tun, ob die Assembly stark benannt ist und die starke Namensüberprüfung aktiviert ist , die CLR wird die Assembly zuerst im GAC testen, so dass es dort eine leichte Verbesserung geben könnte.Die großen Verbesserungen kommen von NGEN und wahrscheinlich von der Basisadresse, obwohl ich nie mit der Basisadresse verstimmt habe. – Josh

Verwandte Themen