我正在寻找一种增加.NET 应用程序启动时间的方法。
想法是在启动初始化后立即进行进程内存转储并将其存储在磁盘上。在第二次运行时,用该转储和加速应用程序启动替换进程内存会很好。
所以,我的问题:
- 有没有办法转储.NET 进程内存?
- 有没有办法从该转储中恢复进程内存状态?
- 解决方案(如果存在)是否适用于 IIS 托管的 ASP.NET 应用程序?
谢谢。
我正在寻找一种增加.NET 应用程序启动时间的方法。
想法是在启动初始化后立即进行进程内存转储并将其存储在磁盘上。在第二次运行时,用该转储和加速应用程序启动替换进程内存会很好。
所以,我的问题:
谢谢。
原始内存转储并不是这样工作的。很多事情都将处理该单个进程之外的事情,如果您尝试重播它,将会非常糟糕地爆炸。您需要做的是查看导致启动缓慢的原因。例如,如果问题是加载配置和设置数据(例如,从数据库),那么可能有一些方法可以序列化该信息,以便可以从本地简单存储重新加载它,而不会产生太多开销。您可能会查看诸如“ilmerge”和“ngen”之类的工具(它们分别减少了“融合”和“jit”时间)——但坦率地说,这些东西对于几乎所有场景来说都有些矫枉过正。
对于 IIS:考虑一个服务器集群。如果服务器当时不在集群中,则启动服务器需要多长时间并不重要。
但是:首先衡量,然后采取行动。
(可能在查看最后作者对上一篇关于开发机器的帖子的评论时超出了主题......)
为了使 ASP.Net 启动更快,在深入研究内存管理的噩梦之前,您是否已经考虑过以下解决方案:
看看 .Net 内存转储是什么样子,您可以在这里找到答案:.NET 内存分析工具 (您会发现它非常庞大!)