2019-8-31-dotnet-启动-JIT-多核心编译提升启动性能
title | author | date | CreateTime | categories |
---|---|---|---|---|
dotnet 启动 JIT 多核心编译提升启动性能
|
lindexi
|
2019-08-31 16:55:58 +0800
|
2019-03-01 15:51:25 +0800
|
dotnet
|
用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 core 还可以使用阶梯编译 在软件启动的过程使用到的方法都使用快速编译的方法,减少JIT执行的时间
Impove App Launch Performance With MultiCore JIT in .NET Framework 4.5
multicore - Does ProfileOptimization actually work? - Stack Overflow
2019-8-31-dotnet-启动-JIT-多核心编译提升启动性能的更多相关文章
- dotnet 启动 JIT 多核心编译提升启动性能
用2分钟提升十分之一的启动性能,通过在桌面程序启动 JIT 多核心编译提升启动性能 在 dotnet 可以通过让 JIT 进行多核心编译提升软件的启动性能,在默认托管的 ASP.NET 程序是开启的, ...
- dotnet 使用 Crossgen2 对 DLL 进行 ReadyToRun 提升启动性能
我对几个应用进行严格的启动性能评估,对比了在 .NET Framework 和 dotnet 6 下的应用启动性能,非常符合预期的可以看到,在用户的设备上,经过了 NGen 之后的 .NET Fram ...
- agentzh 的 Nginx 教程(版本 2019.07.31)
agentzh 的 Nginx 教程(版本 2019.07.31) agentzh 的 Nginx 教程(版本 2019.07.31) https://openresty.org/download/a ...
- (转)redis 学习笔记(1)-编译、启动、停止
redis 学习笔记(1)-编译.启动.停止 一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...
- JIT(动态编译)和AOT(静态编译)编译技术比较
Java 应用程序的性能经常成为开发社区中的讨论热点.因为该语言的设计初衷是使用解释的方式支持应用程序的可移植性目标,早期 Java 运行时所提供的性能级别远低于 C 和 C++ 之类的编译语言.尽管 ...
- S3C6410 纯粹的裸机启动,自己写的SD BOOT启动
这几天晚上一直折腾S3C6410的裸机SD卡启动,不大想使用UBOOT,我是搞硬件的,对底层非常感兴趣,不喜欢已经写好的,因此自己一直在尝试,其实很早之前就试过SD卡启动,也就是ARM11上电后会把S ...
- JIT和AOT编译详解
JIT和AOT编译介绍 JIT - Just-In-Time 实时编译,即时编译 通常所说的JIT的优势是Profile-Based Optimization,也就是边跑边优化 ...
- Linux学习-核心编译的前处理与核心功能选择
硬件环境检视与核心功能要求 根据自己的需求来确定编译的选项 保持干净原始码: make mrproper 我们还得要处理一下核心原始码底下的残留文件才行!假设我们是第一次 编译, 但是我们不清楚到底下 ...
- Angular--AOT和JIT两种编译方式带来的改变
Angular 应用主要由组件及其 HTML 模板组成.由于浏览器无法直接理解 Angular 所提供的组件和模板,因此 Angular 应用程序需要先进行编译才能在浏览器中运行.Angular 提供 ...
随机推荐
- css---文本新增样式
opacity属性指定了一个元素的透明度 默认值:1.0 不可继承 兼容性不是太好 兼容性写法 opacity{ opacity:0.5; filter:alpha(opacity=); //f ...
- Python 学习杂项
#print("Hello World!") #name = "nihfjkds" age = 454 num1 = 1 num2 = 2 #print(nam ...
- 解析JQuery Ajax
jQuery是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 先来看一些简单的方法,这些方法都是对jQuery.ajax()进行封 ...
- docker registry (私有仓库)
首先要导入registry的镜像文件 1.普通的registry 一条命令创建一个仓库 docker run -d -p 5000:5000 --restart=always --name regis ...
- C开发系列-字符串
C语言字符串 C语言字符串本质是使用字符数组来存储的. #include <stdio.h> int main() { "jake"; // "jake&qu ...
- Parted:2T以上磁盘分区工具(LINUX挂载2T以上磁盘)
支持大于2T的磁盘,2T以下的最好还是用Fdisk来分区. [root@centos57 aixi]# parted /dev/hda print Model: VMware Virtual IDE ...
- (转)打开Mac OSX原生的NTFS功能
xingchongsmbp3:~ xingchong$ xingchongsmbp3:~ xingchong$ xingchongsmbp3:~ xingchong$ sudo ln -s /Volu ...
- (转)Unity3D手游开发实践
作者:吴秦出处:http://www.cnblogs.com/skynet/本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名吴秦(包含链接). (转)& ...
- Cutting Game
Cutting Game 刚开始有一\(n\times m\)的矩形网格纸,双方轮流操作,剪网格纸,对于任意一个局面而言,你可以选择其中一张网格纸,把它剪成两个长宽都是整数的网格纸,剪出\(1\tim ...
- 【JZOJ3423】Vani和Cl2捉迷藏&【BZOJ1143】祭祀river
description vani和cl2在一片树林里捉迷藏-- 这片树林里有N座房子,M条有向道路,组成了一张有向无环图. 树林里的树非常茂密,足以遮挡视线,但是沿着道路望去,却是视野开阔.如果从房子 ...