c# – .NET编译器 – 内置嵌套循环优化吗?
发布时间:2020-12-15 05:40:33 所属栏目:百科 来源:网络整理
导读:考虑以下代码片段,在执行效率方面遍历三维单列数组,假设process1()和process2()执行的时间相同: float arr[mMax,nMax,oMax];for (m = 0; m mMax; m++) for (n = 0; n nMax; n++) for (o = 0; o oMax; o++) { process1(arr[m,n,o]); }for (o = 0; o oMax; o+
考虑以下代码片段,在执行效率方面遍历三维单列数组,假设process1()和process2()执行的时间相同:
float arr[mMax,nMax,oMax]; for (m = 0; m < mMax; m++) for (n = 0; n < nMax; n++) for (o = 0; o < oMax; o++) { process1(arr[m,n,o]); } for (o = 0; o < oMax; o++) for (n = 0; n < nMax; n++) for (m = 0; m < mMax; m++) { process2(arr[m,o]); } 现在,众所周知,C#将.NET框架中的数组组织为行主结构.没有任何优化,我会假设第一个循环的执行速度比第二个循环快得多. 问题是:CLR的JIT或cs.exe / vb.exe编译器是否检测并优化这样的循环,可能重新排序嵌套,或者我应该始终保持警惕潜在的性能命中,特别是在可能发生的情况方面如果我试图并行化循环? 解决方法
这是您在C或C编译器中可能期望的那种优化.它实际上是当前的,在Build 2013会话的
this video中提到了这种精确的优化.虽然针对C/C++程序员,但很多内容对C#程序员来说也很有趣.存储器子系统的约束同样相关.实际上并不确定优化是否进入VS2013,iirc还存在一个问题,它也会使本机编译器过于缓慢.
但不,抖动优化器的预算非常紧张.花费太多时间会导致显着的启动延迟和执行暂停,因此无法承受这种分析. C#程序员必须自己做. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |