【问题标题】:Make process memory dump and restore it later in .NET制作进程内存转储并稍后在 .NET 中恢复
【发布时间】:2013-01-17 21:03:43
【问题描述】:

我正在寻找一种增加 .NET 应用程序启动时间的方法。

想法是在启动初始化后立即进行进程内存转储并将其存储在磁盘上。 在第二次运行时,最好用该转储和加速应用程序启动来替换进程内存。

所以,我的问题:

  1. 有没有办法转储 .NET 进程内存?
  2. 有没有办法从该转储中恢复进程内存状态?
  3. 解决方案(如果存在)是否适用于 IIS 托管的 ASP.NET 应用程序?

谢谢。

【问题讨论】:

  • 不确定。 .NET 是托管的,而内存几乎是无人区,这让我觉得 - 不太合理。

标签: .net performance memory-management clr unsafe


【解决方案1】:

原始内存转储并不是这样工作的;很多事情将被处理 单个进程之外的事情,如果您尝试重播它,将会真的严重爆炸。您需要做的是查看导致启动缓慢的原因。例如,如果问题是加载配置和设置数据(例如,从数据库),那么可能有一些方法可以序列化该信息,以便可以从本地简单存储重新加载它,而不会产生太多开销。您可能会查看诸如“ilmerge”和“ngen”之类的工具(它们分别减少了“融合”和“jit”时间)——但坦率地说,这些东西对于几乎所有场景来说都有些矫枉过正。

对于 IIS:考虑一个服务器集群。如果服务器当时不在集群中,那么启动服务器需要多长时间并不重要。

但是:首先衡量,然后采取行动。

【讨论】:

  • 我们有一个生产集群,但在开发人员的机器或测试服务器上,它需要整个生命周期才能启动。启动过程中真正缓慢的部分是 IoC 容器(温莎城堡)初始化。容器配置未标记为可序列化。大量的类和依赖图使得冷启动如此缓慢......
  • @DmitriyStartsev 呵呵; 是的,IoC 需要进行一些配置。恐怕我没有魔杖。
【解决方案2】:

(可能是看最后一位作者 cmets 到上一篇关于开发机器的帖子的话题......)

为了让 ASP.Net 启动更快,在深入研究内存管理的噩梦之前,您是否已经考虑过以下解决方案:

看看 .Net 内存转储是什么样子的,你可以在这里找到答案:.NET Memory Profiling Tools (你会发现它非常大!)

【讨论】:

    猜你喜欢
    • 2011-01-09
    • 2011-08-07
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多