如何获取应用程序启动期间创建的所有类型(完全限定)的列表

时间:2012-01-11 21:03:51

标签: .net windows performance

我正在努力解决应用程序的冷启动性能,该应用程序恰好是.NET和COM的混合体。冷启动是指重启机器后启动应用程序(松下Toughbooks的部署平台经常发生)。

冷启动的时间约为热启动的3倍(110秒对35秒)。

使用进程监视器我已经确定冷启动和热启动之间的主要区别在于访问dll所花费的时间 - 主要来自GAC,还有来自Windows \ microsoft.net和其他一些文件夹。

我查看了以下相关帖子,并实际实施了一些建议:

结果似乎是我需要将IL程序集或其本机映像“预先加载”到系统缓存中。 [我明白,当应用程序实际启动时,不能保证它们仍然存在,并且这可能会增加启动时间。]根据上述一些帖子,这是Acrobat reader和Microsoft office采用的方法。

我的复杂之处在于使用的第三方库非常大,因此在 all 引用的程序集中预加载所有类型是不切实际的。我只想加载应用程序启动期间实际加载的类型。那么我如何识别那些类型及其包含的程序集呢?

我正在考虑的另一种方法是以某种方式在“背景”中启动(并且稍后杀死)应用程序,但不确定是否可以使用Windows应用程序完成此操作。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

经过进一步研究后,同事提出了一些建议:

我发现获得此类列表的一种方法是通过Jet Brains的dotTracePerformance应用程序。

但我还发现至少部分信息已包含在与文件夹C:\ Windows \ Prefetch下的应用程序关联的“预取”文件中。这些是二进制文件,但可以使用winPrefetchView等工具查看内容。

不幸的是,默认情况下,Windows仅在预取文件中记录应用程序启动的前几秒。此时间在注册表中配置,但(如帖子Windows XP prefetcher registry values中所述),此二进制密钥的解释不清楚。

我有想法在系统启动时以某种方式强制对应用程序进行预取,但是还没有找到通过win api执行此操作的方法。 (沿着这些方面的几个黑客并没有产生显着的差异。)

无论如何,我都能回复原来的帖子。