dotnet 启动 JIT 多核心编译提升启动性能

栏目: ASP.NET · 发布时间: 5年前

内容简介:用2分钟提升十分之一的启动性能,通过在桌面程序启动 JIT 多核心编译提升启动性能 在 dotnet 可以通过让 JIT 进行多核心编译提升软件的启动性能,在默认托管的 ASP.NET 程序是开启的,对 WPF 等桌面程序需要手动开启在 Main 函数或 App 的构造函数添加下面代码可以开启在 SetProfileRoot 设置一个文件夹,这个文件夹需要是已经存在文件夹,如果设置到一个不存在的文件夹,那么这个方法也不会出现异常,只是什么都不会做

用2分钟提升十分之一的启动性能,通过在桌面程序启动 JIT 多核心编译提升启动性能 在 dotnet 可以通过让 JIT 进行多核心编译提升软件的启动性能,在默认托管的 ASP.NET 程序是开启的,对 WPF 等桌面程序需要手动开启

在 Main 函数或 App 的构造函数添加下面代码可以开启

using System.Runtime;


            ProfileOptimization.SetProfileRoot(@"C:\lindexi\");
            ProfileOptimization.StartProfile("Startup.Profile");

在 SetProfileRoot 设置一个文件夹,这个文件夹需要是已经存在文件夹,如果设置到一个不存在的文件夹,那么这个方法也不会出现异常,只是什么都不会做

在StartProfile设置一个文件名,将会在这个文件记录启动的时候需要调用的函数

原理

在可以进行多线程计算的设备,可以通过一个线程运行代码,多个线程进行 JIT 编译,提高性能。

在 SetProfileRoot 设置一个文件夹,将会在这个文件夹存放用于提升性能的文件,在 StartProfile 将会创建一个二进制文件记录在启动的时候需要调用的函数

在第一次运行程序的时候,会判断是否存在提升性能的文件,如果不存在就在启动的时候后台收集需要调用的函数,将这些函数记在提升性能的文件。

在第二次运行程序的时候,因为已经存在提升性能的文件,读取这个文件可以知道在启动的时候需要调用的函数,于是就进行后台多线程JIT编译这些会调用到的方法

启动这个功能

默认在 ASP.NET 是启动这个功能,如果需要关闭这个功能,请在 web.config 文件添加下面代码

<system.web>
  <compilation profileGuidedOptimizations="None" />
</system.web>

在 WPF 等桌面程序默认是没有开启,需要调用本文一开始说的两个函数开启,需要注意两个方法的顺序是固定,先设置文件夹然后设置文件,注意设置的文件夹需要是存在同时可以写文件

请在程序执行调用 SetProfileRoot 两个函数,如 Main 或 App 构造函数

如果一个应用程序表现是根据传入的命令行有不同的运行方法,如我在做的软件,有备课和授课两个不同的方法,这两个不同的方法启动需要调用的方法也不相同,就需要通过命令行在 StartProfile 使用两个不同的文件,对于不同的模式使用不同文件

ProfileOptimization.SetProfileRoot(@"C:\lindexi\");
if ( Editing )
{
	// 现在进入备课模式
    ProfileOptimization.StartProfile("Editing.Profile");
}
else
{
	// 现在使用的是授课方法
	ProfileOptimization.StartProfile("Displaying.Profile");
}

这里可以根据不同的命令参数使用不同的文件,这样不同的命令可以对使用的不同的启动方法做不同优化

环境

要求是在非单核的设备上,同时需要在 .NET Framework 4.5 和以上或 dotnet core 3.0 以上

性能

经过很多次测试,发现调用 SetProfileRoot 两个函数需要的时间在我的设备上大概是 0.2 ms 这个时间不算短,同时发现实际到软件启动完成的时间几乎没有提升

因为很多软件的启动时间都在文件读写上,而不是在 JIT 编译的时间

所以不启动这个功能和启动的启动性能几乎没有提升

为什么这个功能不在默认的桌面程序打开?因为这个功能需要读写提升性能的文件,而默认很难知道这个文件应该放在哪,同时启动的时候读取文件的时间很多时候比JIT编译长。

在 ASP.NET 可以通过托管的方式做到自动读取提升性能的文件,所以默认就在 ASP.NET 使用

dotnet 启动 JIT 多核心编译提升启动性能

ProfileOptimization

Impove App Launch Performance With MultiCore JIT in .NET Framework 4.5

multicore - Does ProfileOptimization actually work? - Stack Overflow


以上所述就是小编给大家介绍的《dotnet 启动 JIT 多核心编译提升启动性能》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数学世纪

数学世纪

皮耶尔乔治·奥迪弗雷迪 / 胡作玄、胡俊美、于金青 / 上海科学技术出版社 / 2012-1 / 28.00元

《数学世纪:过去100年间30个重大问题》以简短可读的方式论述了整个20世纪的数学。20世纪的数学博大精深,新兴领域及学科的建立发展,许多经典问题得到解决,大量新的有意义的问题的引入,为数学带来了活力。《数学世纪:过去100年间30个重大问题》介绍了数学基础,20世纪的纯粹数学、应用和计算数学,以及目前未解的重要问题,中间穿插了希尔伯特的23个问题的解决情况、菲尔兹奖和沃尔夫奖得主的工作成就等。一起来看看 《数学世纪》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具