使用多核JIT提升WPF启动速度

       .NET Framework 4.5以上版本支持使用多核JIT,通过多核JIT并行编译可以减少程序的启动时间,平均提速大约10%~50%,WPF应用程序只需要在App.xaml.cs中构造函数加入以下内容:

java
public App()
{
CreateProfileOptimization();
}
private static void CreateProfileOptimization()
{
try
{
string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "MyApp");
Directory.CreateDirectory(path);
// 设置JIT profile文件存储的目录
ProfileOptimization.SetProfileRoot(path);
// 通过加载指定的profile文件来使能多核JIT
ProfileOptimization.StartProfile("startup.profile");
}
catch (UnauthorizedAccessException)
{
}
catch (IOException)
{
}
}

       其中MyApp可以替换成你的应用的名称,生成的加速文件存储在C:\Users\用户名\AppData\Local\MyApp。

       WinForm应用程序在Program.cs文件中添加以下内容启动多核JIT:

java
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
CreateProfileOptimization();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
private static void CreateProfileOptimization()
{
try
{
string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "MyApp");
Directory.CreateDirectory(path);
// 设置JIT profile文件存储的目录
ProfileOptimization.SetProfileRoot(path);
// 通过加载指定的profile文件来使能多核JIT
ProfileOptimization.StartProfile("startup.profile");
}
catch (UnauthorizedAccessException)
{
}
catch (IOException)
{
}
}

       第一次启动时,JIT编译器会记录需要编译的所有函数,CLR会保存已执行的函数的profile文件,第一次执行程序并不会降低启动时间,当第二次运行程序时,通过调用ProfileOptimization.StartProfile加载profile文件获取需要编译的函数信息来加速编译过程。

注:首次运行程序会记录函数信息,不会提升程序启动速度,当第二次运行时,才会提升程序的启动速度。