补漏.NET8 NativeAOT

时间:2023-11-25 18:36   作者:ChenReal    阅读:80

忽然发现,上一篇实战NativeAOT的文章中漏了一个很重要的测试指标——执行速度。

Terribly Sorry!!!我现在赶紧补上~~

一、测试代码

在Program.cs代码入口方法头尾,各自增加一行时间输出的代码。时间必须是有毫秒的输出。例如:

static void Main(string[] args){
    Console.WriteLine($"App Started At:{DateTime.Now.ToString("HH:mm:ss.fff")}");
...
    Console.WriteLine($"App `Finished` At:{DateTime.Now.ToString("HH:mm:ss.fff")}");
}

二、测试应用样本

将VuePacker应用分别发布两个版本:

  • 一个用NativeAOT编译的,放在目录vuepacker-aot里面。
  • 另外一个编译为普通的.NET控制台应用,放在目录vuepacker-dotnet里面。

三、测试脚本

分别准备两个启动应用的测试脚本,在执行应用启动命令之前输出一个时间,用于测试应用的启动时间。

1、AOT应用

@echo off
set ROOT_PATH=D:\develop\rmblog

echo Script Started:%TIME:~0,2%:%TIME:~3,2%:%TIME:~6,2%.%TIME:~9,2%0

vuepacker-aot\VuePacker.exe --src %ROOT_PATH%\UI\views --dist %ROOT_PATH%\bin\views --config %ROOT_PATH%\UI\tools\appsettings.json --uglify

2、.NET应用

@echo off
set ROOT_PATH=D:\develop\rmblog

echo Script Started:%TIME:~0,2%:%TIME:~3,2%:%TIME:~6,2%.%TIME:~9,2%0

vuepacker-dotnet\VuePacker.exe --src %ROOT_PATH%\UI\views --dist %ROOT_PATH%\bin\views --config %ROOT_PATH%\UI\tools\appsettings.json --uglify

四、测试结果

上面的两组脚本,各自执行了三次。结果如下:

1、AOT应用

aot-test-1.png

  • 应用平均启动时间:51ms
  • 应用平均执行时间:278ms

2、.NET应用

aot-test-2.png

  • 应用平均启动时间:69ms
  • 应用平均执行时间:385ms

五、总结

我的测试方法虽然比较粗糙,但是反映了相对客观的结论:在应用执行速度上的测试,很明显AOT都具有明显的优势。 我们不妨列个表格,直观的比对一下吧。

| 对比指标 | .NET应用 | AOT应用 | 提升% | | -------- | -------- | ------- | ----- | | 启动速度 | 69ms | 51ms | +26% | | 执行速度 | 385ms | 278ms | +28% |

 

评论
0/200