Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何获取应用程序启动期间创建的所有类型(完全限定)的列表_.net_Windows_Performance - Fatal编程技术网

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

.net 如何获取应用程序启动期间创建的所有类型(完全限定)的列表,.net,windows,performance,.net,Windows,Performance,我正在努力解决一个应用程序的冷启动性能问题,这个应用程序恰好是.NET和COM的混合体。所谓冷启动,我指的是在机器重新启动后启动应用程序(这在松下Toughbooks部署的平台上经常发生) 冷启动时间大约是热启动时间的3倍(110秒vs 35秒) 通过使用process monitor,我确定冷启动和热启动之间的主要区别在于访问DLL所需的时间-主要是从GAC,但也可以从Windows\microsoft.net和其他几个文件夹访问DLL 我已经审阅了以下相关帖子,并实际执行了一些建议: CL

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

冷启动时间大约是热启动时间的3倍(110秒vs 35秒)

通过使用process monitor,我确定冷启动和热启动之间的主要区别在于访问DLL所需的时间-主要是从GAC,但也可以从Windows\microsoft.net和其他几个文件夹访问DLL

我已经审阅了以下相关帖子,并实际执行了一些建议:

  • CLR程序集加载-冷启动性能问题

    确定.NET程序集和方法引用

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

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

我正在考虑的另一种方法是以某种方式在“后台”启动(并随后关闭)应用程序,但不确定是否可以用windows应用程序来完成


感谢您的建议。

经过进一步研究,同事们提出了以下建议:

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

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

不幸的是,默认情况下,Windows只在预回迁文件中记录应用程序启动的前几秒钟。这一次是在注册表中配置的,但是(如本文所讨论的)这个二进制键的解释不清楚

我曾想在系统启动时强制对应用程序进行预取,但还没有找到通过WinAPI实现这一点的方法。(沿着这些思路的几次黑客攻击并没有产生显著的影响。)


无论如何,我对我原来的帖子有一个答案。

如果这回答了你的问题,那么你应该接受答案