C# 记录并恢复.NET应用程序快速启动的应用程序状态
我正在使用一个开源的.NET应用程序,它需要很长时间才能启动和初始化。它可以创建数千个对象并配置它们以供首次使用。我正在努力改善这个启动时间 有没有办法使用Windows API或类似工具捕获应用程序内存,然后在重新启动电脑后快速“恢复”此状态?本质上,是否有一种方法可以访问和保存.NET应用程序的底层内存,并让CLR在以后“吸收”该内存C# 记录并恢复.NET应用程序快速启动的应用程序状态,c#,.net,windows,winapi,memory,C#,.net,Windows,Winapi,Memory,我正在使用一个开源的.NET应用程序,它需要很长时间才能启动和初始化。它可以创建数千个对象并配置它们以供首次使用。我正在努力改善这个启动时间 有没有办法使用Windows API或类似工具捕获应用程序内存,然后在重新启动电脑后快速“恢复”此状态?本质上,是否有一种方法可以访问和保存.NET应用程序的底层内存,并让CLR在以后“吸收”该内存 最简单的方法是使用Windows Hibernate创建“hiberfile.sys”,然后保存此文件的副本(如果可能的话)。每次windows启动时,您都
- 最简单的方法是使用Windows Hibernate创建“hiberfile.sys”,然后保存此文件的副本(如果可能的话)。每次windows启动时,您都会用保存的“干净”版本覆盖现有的hiberfile,以便下次启动。这确保了您可以保存/恢复应用程序状态,而无需处理内存、指针和句柄。这行吗
- 一种方法是创建一个mem磁盘,尽管我不知道恢复是否可行。(实际上可以脱离HDD工作的虚拟内存,允许将内存保存/恢复为简单文件)
- 类似于问题,但有点不同,因为我不介意将应用程序内存重新插入到它保存的确切地址。电脑完全在我手中,为了简单起见,假设没有其他应用程序在运行
- 雷蒙德·陈(Raymond Chen)在一篇文章中对此提出了异议,但这里也没有太多的技术数据
- ,一个开源进程监视器能够“显示/释放/更改保护/解除进程虚拟内存空间中的内存区域”。这可能和我想要的东西相似吗
C不支持框外,尽管.NET 3和更高版本中的工作流基础允许工作流停止并重新启动。我想知道应用程序如何表现为工作流
因此,是的,这是可能的,而且可能确实更快,尽管不是您最初的想法。我认为您最好能做的是二进制序列化和反序列化Raymond Chen的文章提供了技术数据,包括一些非常重要的示例(系统的其余部分不会休眠,这可能会使所有外部句柄和资源无效)。如果内存被重新插入到它被释放的确切地址,会怎么样?类似于Windows休眠/还原?整个电脑都在我的控制下。这是非常困难的,如果不是不可能的话,要保证这一点。休眠在内核级别工作,所以除非你能强制内核在该块中永远不分配任何内存,否则请加载存储的内存数据,然后将其映射到进程虚拟内存映射中的特定地址,这是不会发生的。在.Net中,大部分或全部这是不可能的,甚至可能C/asm也不可能直接与WinAPI一起工作。在.Net世界中,序列化无疑是一种更正确的方法,并且可能会在以后省去很多麻烦(更简单、更安全)。可能性很小,但创建休眠文件的唯一方法是触发休眠,因此需要在Windows one之前运行一个引导加载程序来制作一个副本,然后交换休眠文件以供使用。篡改内核的引导过程不是解决序列化问题的好方法。不太难。假设我们引导到GRUB或可能触发此类代码的东西。
hiberfile.sys在启动windows后无法访问?我建议在下次重新启动时复制备份,以便在windows中运行的应用程序可以执行此操作。这可能吗?