Frage

Hintergrund: In meinem Unternehmen entwickeln wir ein Bündel von Anwendungen, die die gleichen Kern DLL verwenden. Diese DLL verwenden Spring.net der IoC-Container Dinge zu verdrahten (Auto-Verkabelung). Alle Anwendungen werden mit der gleichen Feder Konfigurationsdatei, und diese Konfigurationsdatei verweist auf viele Klassen in vielen verschiedenen DLL. Aber nicht alle Anwendung muss Funktionalität von jedem dll. Aber wegen der Art und Weise IoC-Container arbeiten, alle DLL für Spring.net geladen wird, um die Arten zu untersuchen und prüfen, welche Schnittstellen sie implementieren und so weiter.

Kern Frage: Ich verstehe, dass es besser ist, nur die DLL laden Sie auch wirklich nutzen. Aber ist es wirklich schlecht für die Speichernutzung nur eine verwaltete DLL zu laden? Oder ist es erst dann Klassen, die Sie verwenden in der DLL und sie bekommen JIT'ed, dass die meisten Speicher verwendet werden?

War es hilfreich?

Lösung

Wenn keine des Code von der Baugruppe immer verwendet wird, dann schließlich die Seiten von dieser Versammlung werden aus dem Speicher in die Auslagerungsdatei für aktiv genutzten Seiten verschoben werden. In diesem Fall ist der Gesamteffekt langfristigen ist wahrscheinlich gering. Obwohl, es wird eine negative Auswirkung auf die Startzeit sein.

Andere Tipps

Ich glaube nicht, dass es so schlecht. Das einzige Problem ist, dass wegen der großen Metadaten und wie viel Speicher Ihre Anwendung dauert es ist mehr möglich, dass einige Teile der Anwendung, die in Gebrauch sind, werden an verschiedenen Speicherseiten befinden, die ‚einige Performance-Lecks verursachen können, aber es ist sehr niedrigen Segment der Anwendung, in der diese Art von Dingen sind kritisch.

Wirklich schlecht ist ein schwieriger Begriff zu quantifizieren, ich denke, auf der Skala der Dinge abhängt, im Allgemeinen würde ich sagen, dass, wenn Sie Laden Sachen vermeiden können Sie nicht brauchen Sie sollen. Aber natürlich, wenn Sie Reflektion verwenden, um zu bestimmen, ob Sie können verwenden Sie es, Sie es zuerst laden müssen ... Huhn und das Ei-Problem.

Etwas zu sein, obwohl bewusst, wenn Sie eine Baugruppe in eine Anwendungsdomäne laden können Sie nicht dann entladen sich von der App-Domain ist es möglich, jedoch dynamisch Anwendungsdomänen Last Baugruppen in sie zu schaffen und die gesamte Anwendungsdomäne entladen wenn Sie fertig sind.

natürlich Laden DLL w / o mit ihnen langsame Startzeit verursacht aufgrund der Montage von der Festplatte lesen und Beweise / Sicherheitskontrollen. Aber wenn der Speicher Ihre Sorge ist, mindestens Sie sicher sein können, werden Sie nicht mehr Speicherplatz verschwenden als die Größe Ihrer Baugruppen, wenn Sie wirklich verwenden keine Typen innerhalb. Natürlich, wenn diese Typen sind in der Federkonfiguration angegeben, zumindest bekommen diese Arten in den Speicher und ihre statischen Initialisierer geladen (falls vorhanden) ausgeführt wird. In seltenen Fällen kann dies ein Problem sein könnte. Jiting wird von der CLR auf einer pro-Methode Grundlage, so Methoden erfolgen auf Sie nicht verwenden, werden nicht cpu + Speicher verschwenden.

In jedem Fall, dass Sie Ihre Konfigurationsdateien in Partitionen aufteilen können z.B. durch alle Objektdefinitionen der Moduls A in Datei moduleA.config setzen, alle Definitionen von Modul B in der Datei moduleB.config und nur die Module für Ihre Anwendung angeben, die wirklich benötigt werden.

hth, Erich

PS: Ich würde auch für .NET-relevante Fragen zu unserem Community-Foren rel="nofollow -. es wahrscheinlicher ist, Ihre Fragen dort beantwortet zu bekommen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top