在.Net Native编译后,异​​步API速度较慢

时间:2016-03-23 13:36:10

标签: c# windows-store-apps win-universal-app .net-native

我们创建了一个项目,它返回在单个线程和多个线程上完成大量异步任务所需的平均时间。这些任务大多是空的,只是使用await Task.Yield()在同一个线程上导致上下文中断。目的是评估任务计划程序的性能。

我们使用.Net Native编译了相同的代码,没有它。我们发现的结果非常惊人。使用.Net Native相同的代码在手机上降低了200%的性能,在桌面应用程序上降低了大约25%。

详细结果(越低越好):

在手机上:

计划20,000个异步任务并计算所花费的时间。我们运行此测试10次以获得执行此任务所需的平均时间。

单线程(秒):

托管代码(没有.Net Native编译)

3.02

.Net Native编译代码

9.06

多线程(以秒为单位):

托管代码(没有.Net Native编译)

0.10

.Net Native编译代码

0.29

在桌面上:

计划80,000个异步任务并计算所花费的时间。我们运行此测试10次以获得执行此任务所需的平均时间。

单线程(秒):

托管代码(没有.Net Native编译)

9.15

.Net Native编译代码

11.394

多线程(以秒为单位):

托管代码(没有.Net Native编译)

0.0937

.Net Native编译代码

0.177

我们的应用程序使用异步API,并且在.Net Native编译后可见性能下降。这些数字似乎解释了退化,除非我们错过了什么。还有其他人遇到类似的问题,如果有,是否有解决方法?

代码段:

 for (int i = 0; i < count; i++)
 {
     Task.Run(() => ProcessTaskDesktop());
 }

 public async void ProcessTaskDesktop()
 {
     await Task.Yield();
     .
     .
     //logic to do iterations and check code end
     .
     .
 }

Download test code here

0 个答案:

没有答案