Ich arbeite mit einer Open-Source-.NET-Anwendung, die viel Zeit zum Starten und Initialisieren benötigt. Es erstellt Tausende von Objekten und konfiguriert sie für den ersten Gebrauch. Ich versuche diese Startzeit zu verbessern.Aufzeichnen und Wiederherstellen des Anwendungsstatus für den schnellen Start von .NET-Anwendungen
Gibt es eine Möglichkeit Anwendungsspeicher mit der Windows-API oder ähnlich zu erfassen, und dann schnell „wiederherstellen“ diesen Zustand später nach dem Neustart des PC? Gibt es im Wesentlichen eine Möglichkeit, auf den zugrunde liegenden Speicher einer .NET-Anwendung zuzugreifen und sie zu speichern, und die CLR diesen Speicher zu einem späteren Zeitpunkt "absorbieren" zu lassen?
Der einfachste Weg wäre Windows-Hibernate verwenden „hiberfile.sys“, zu erstellen und dann eine Kopie dieser Datei zu speichern (wenn das möglich ist). Jedes Mal, wenn Windows gestartet wird, überschreiben Sie die vorhandene Hiberdatei mit der gespeicherten "sauberen" Version für den nächsten Start. Dies stellt sicher, dass Sie den Anwendungsstatus speichern/wiederherstellen können, ohne mit Speicher, Zeigern und Handles umgehen zu müssen. Könnte das funktionieren?
Eine Möglichkeit wäre eine mem-Platte erschaffen, obwohl ich weiß nicht, ob die Wiederherstellung möglich ist. (Virtueller Speicher, der funktioniert off tatsächlich die Festplatte, so dass der Speicher als einfache Datei wiederhergestellt gespeichert/zu)
Ähnlich this Frage, aber ein bisschen anders, da ich nichts dagegen, wieder Einsetzen des Applikationsspeicher an die genaue Adresse, in der es gespeichert wurde. Der PC ist vollständig in meinen Händen und der Einfachheit halber angenommen, dass keine anderen Apps laufen.
C# unterstützt continuation out-of-the-box nicht, obwohl Workflow Foundation in .NET 3.0 und höher ermöglicht, Workflows zu stoppen und neu zu starten. Ich frage mich, wie sich eine Anwendung als Workflow verhalten kann.
Raymond Chen argumentiert dagegen in einer blog post, aber auch nicht viele technische Daten hier.
YAPM kann ein Open-Source-Prozessmonitor die Speicherbereiche im virtuellen Speicherbereich eines Prozesses anzeigen/freigeben/ändern/freigeben/freigeben. Könnte das etwas ähnlich dem sein, wonach ich suche?
Ich denke, das Beste, was Sie tun können, ist binäre Serialisierung und Deserialisierung –
Raymond Chens Artikel gibt technische Daten, einschließlich ein paar sehr wichtige Beispiele (der Rest des Systems nicht überwintert, möglicherweise alle externen Handles und Ressourcen ungültig). – ssube