我正在使用需要很長時間啓動和初始化的開放源代碼.NET應用程序。它創建了數千個對象並將它們配置爲首次使用。我試圖改善這個啓動時間。記錄和恢復應用程序狀態以快速啓動.NET應用程序
有沒有一種方法可以使用Windows API或類似方法捕獲應用程序內存,然後在重新啓動PC後稍後「快速」恢復此狀態?從本質上講,有一種方法可以訪問和保存.NET應用程序的底層內存,並讓CLR在以後「吸收」這些內存?
最簡單的方法是使用Windows Hibernate創建「hiberfile.sys」,然後保存該文件的副本(如果可能的話)。每次啓動Windows時,都會使用保存的「乾淨」版本覆蓋現有的hiberfile,以便下次啓動。這確保您可以保存/恢復應用程序狀態,而無需處理內存,指針和句柄。這可以工作嗎?
一種方法是創建一個磁盤,但我不知道是否可以恢復。 (虛擬內存,實際上關閉硬盤,允許內存保存/恢復爲一個簡單的文件)
問題,但有點不同,因爲我不介意重新插入應用程序內存在它保存的確切地址。PC完全在我手中,爲簡單起見,假設沒有其他應用程序正在運行。
C#不支持continuation開箱即用,雖然.NET 3.0和更高版本中的Workflow Foundation允許停止和重新啓動工作流程。我想知道應用程序如何表現爲一個工作流程。
雷蒙德陳反駁了這一場blog post,但沒有太大的技術數據在這裏無論是。
YAPM,開源進程監視器能夠「顯示/釋放/更改保護/取消進程的虛擬內存空間中的內存區域」。這可能與我之後的事情類似嗎?
我認爲你可以做的最好的是二進制序列化和反序列化 – 2012-03-30 14:40:10
Raymond Chen的文章確實給出了技術數據,其中包括一些非常重要的例子(系統的其餘部分沒有休眠,可能使所有外部句柄和資源無效)。 – ssube 2012-03-30 14:55:10