Frage

auf .NET Arbeit gibt mir eine gute Leistung in der Regel für die Anwendung selbst, sondern die Anfangsladezeiten für meine Anwendung sind recht groß. Vieles davon geht in Richtung Ladeeinheiten, die schwer zu messen.

Gibt es Optimierungen, die ich meinen Baugruppen anwenden können sie schneller zu machen, ohne zu laden, die GAC oder Ngen beteiligt und die sind für Clickonce nicht verfügbar?

Dies ist ein WinForms 2.0-Projekt. Ich kann es auf eine 3,5 Upgrade aber, dass meine Nutzerbasis begrenzen. Ich habe .NET Framework 3.5 auf meinem Rechner installiert ist.

War es hilfreich?

Lösung

Ich habe eine sehr kleine EXE erstellt, die so schnell wie möglich einen Begrüßungsbildschirm zeigt. Danach initialisieren ich alles.

Der JIT-Compiler laden Module, die aus dem Verfahren genannt werden, die jitted wird. Also muss man darauf achten, dass die Methode, die den Begrüßungsbildschirm zeigt, stellt nicht die Methoden in Module, die Sie noch geladen werden sollen, nicht.

Beispiel:

internal sealed class Startup {

    // Call Startup.Run() from Program.Main to start the application
    internal void Run() {
        this.ShowSplash();
        this.ContinueStartup();
    }

    private void ShowSplash() {
        _splash = new Splash();
        _splash.Show();
        Application.DoEvents();
    }

    [MethodImpl(MethodImplOptions.NoInlining)]
    private void ContinueStartup() {
        // Do the startup here
    }
}

Der [MethodImpl (MethodImplOptions.NoInlining)] benötigt wird, so dass die ContinueStartup () -Methode nicht von den jit inlined bekommt, weil die Module verursacht zu früh geladen werden.

Andere Tipps

Sie können ILMerge verwenden, um alle Ihre Baugruppen in einer Datei zusammenführen. eine Datei in dem Speicher zu lesen, ist schneller als 10 Dateien zu lesen. Obwohl ich bezweifle, dass Sie wirkliche Verbesserung der Ladegeschwindigkeit sehen wird es.

Sie können auch alle Verweise auf andere Baugruppen entfernen, die ui an den Benutzer laden, und während er die Benutzeroberfläche (Tippen oder etwas anderes) verwendet vorzuladen alle benötigten Baugruppen Assembly.Load verwenden, erhalten alle benötigten Funktionszeiger mit Reflexion und speichern sie in der internen Mitglieder. Auf diese Weise Anwendung lädt viel schneller. Aber ich glaube nicht, dass jeder vernünftige Mensch Optimierung wie dies tun wird.

Können Sie beschreiben Ihre wie viele Baugruppen Sie haben?

.NET lädt die Baugruppe im Fluge, wenn man sie braucht. Sie können sich entscheiden, Ihre App in mehreren Baugruppen aufgeteilt. Baugruppen müssen durch unterteilt werden: Einsatzstrategie, Sicherheit und Performance. Die meisten Apps 3 Schichtstruktur unterteilt sind (UI, Business, Daten).

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