Duff 装置中case情况越多性能越好

猜想:Duff装置再循环里面,直接调用的方法越多(也就是case的数量比较多),性能相对越好 ???!!!

我们基于Duff装置来做进一步的测试。

然后分别添加两个新的函数,一个函数式 case有4种情况,另一个是case有 12种情况。。。

 1     function duffDevice() {
 2           var testVal = 0;
 3           var n = Math.ceil(iterations / 8);
 4           var caseTest = iterations % 8;
 5           do {
 6               switch (caseTest) {
 7                   case 0:
 8                       testVal++;
 9                   case 7:
10                       testVal++;
11                   case 6:
12                       testVal++;
13                   case 5:
14                       testVal++;
15                   case 4:
16                       testVal++;
17                   case 3:
18                       testVal++;
19                   case 2:
20                       testVal++;
21                   case 1:
22                       testVal++;
23               }
24               caseTest = 0;
25           }
26           while (--n > 0);
27       }

duffDevice

 1       function duffDeviceSize4() {
 2           var testVal = 0;
 3           var n = Math.ceil(iterations / 4);
 4           var caseTest = iterations % 4;
 5           do {
 6               switch (caseTest) {
 7                   case 0:
 8                       testVal++;
 9                   case 3:
10                       testVal++;
11                   case 2:
12                       testVal++;
13                   case 1:
14                       testVal++;
15               }
16               caseTest = 0;
17           }
18           while (--n > 0);
19       }

duffDeviceSize4

 1    function duffDeviceSize12() {
 2           var testVal = 0;
 3           var n = Math.ceil(iterations / 12);
 4           var caseTest = iterations % 12;
 5           do {
 6               switch (caseTest) {
 7                   case 0:
 8                       testVal++;
 9                   case 11:
10                       testVal++;
11                   case 10:
12                       testVal++;
13                   case 9:
14                       testVal++;
15                   case 8:
16                       testVal++;
17                   case 7:
18                       testVal++;
19                   case 6:
20                       testVal++;
21                   case 5:
22                       testVal++;
23                   case 4:
24                       testVal++;
25                   case 3:
26                       testVal++;
27                   case 2:
28                       testVal++;
29                   case 1:
30                       testVal++;
31               }
32               caseTest = 0;
33           }
34           while (--n > 0);
35       }

duffDeviceSize12

测试结果如下:

以下只是我自己的结论,不一定正确,仅提供参考(不是很确定的东西,不能误人子弟):

这个结果说明了,在Duff循环中,case 情况越多,性能相对越好,但是这样代码的书写不是很方便。Duff装置提供给我的更多的只是一个思路,而不是一个死板的算法公式。

欢迎大家共同探讨。。。迎风一刀劈有礼了。。。

时间: 2024-10-05 16:09:16

Duff 装置中case情况越多性能越好的相关文章

Javascript Loop unrolling Duff device Javascript Duff装置 循环展开

Javascript 中会用到for 循环,当要循环的数据记录很多的时候,可能会对性能产生很大影响.这时我们可以考虑展开for循环,这时就要用到Duff装置(Duff Device). 先来看一个小例子,用for循环来实现: function process(data) { htmlStr += data + "<br />"; //div = document.getElementById("myDiv"); //div.innerHTML += da

SQL中使用WITH AS提高性能,使用公用表表达式(CTE)简化嵌套SQL

一.WITH AS的含义     WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分. 特别对于UNION ALL比较有用.因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高,所以可以使用WITH AS短语,则只要执行一遍即可.如果WITH AS短语所定

(九)shell中case语句、程序传参、while

2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中的switch case不同.shell中的case默认就是匹配上哪个执行哪个,不会说执行完了还去执行后面的其他case(就好像shell中的case语言默认都带了break). 2.2.6.2.调用shell程序的传参(1)C语言中可以通过main函数的argc和argv给程序传参(详情参考<4.

在VS 2015中边调试边分析性能

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 对代码进行性能分析,之前往往是一种独立的Profiling过程,现在在VS 2015中可以结合到调试过程中. Charles Willis和Dan Taylor在MSDN上发表了的一篇文章<Analyze Performance While Debugging in Visual Studio 2015>,给大家介绍了如何在VS 2015中边调试边分析性能的方法(或者说是一个操作指南).

在图片上画矩形并高亮显示矩形区域、统计矩形区域中像素情况并绘制直方图

<学习OpenCV>中文版第4章第3题 提纲 题目要求 程序代码 结果图片 题目要求: ①允许用户在图片上选择一个矩形区域,当鼠标放开,高亮显示矩形区域 ②在另一个独立窗口中,使用绘图函数绘制一个图表,分别用蓝.绿和红色表示选中区域中各种颜色的像素在指定数值范围内的数量. 程序代码: 1 #include "stdafx.h" 2 #include <cv.h> 3 #include <highgui.h> 4 using namespace std

在 NetBeans IDE 6.0 中分析 Java 应用程序性能

NetBeans IDE 6.0 包含一个强大的性能分析工具,可提供与应用程序运行时行为有关的重要信息.通过 NetBeans 性能分析工具,我们可以方便地在 IDE 中监控应用程序的线程状态.CPU 性能以及内存使用情况,而且产生的开销相对较少. 本文将概述 IDE 中包含的性能分析工具,并指导您快速开始分析 NetBeans 项目的性能.本文旨在演示 IDE 中可用的各种性能分析任务以及分析项目性能时可以获得的分析结果.但并不覆盖 IDE 中包含的所有性能分析功能,也不会深入探索如何研究性能

SQL Server中一个隐性的IO性能杀手-Forwarded record

原文:SQL Server中一个隐性的IO性能杀手-Forwarded record 简介     最近在一个客户那里注意到一个计数器很高(Forwarded Records/Sec),伴随着间歇性的磁盘等待队列的波动.本篇文章分享什么是forwarded record,并从原理上谈一谈为什么Forwarded record会造成额外的IO.   存放原理     在SQL Server中,当数据是以堆的形式存放时,数据是无序的,所有非聚集索引的指针存放指向物理地址的RID.当数据行中的变长列增

SQL集合函数中case when then 使用技巧

SQL集合函数中case when then 使用技巧 作者: 字体:[增加 减小] 类型:转载 我们都知道SQL中适用case when then来转化数据库中的信息 比如 select (case sex when 0 then '男' else '女' end) AS sex from studentInfo 那么在集合函数中它有什么用呢 ? 假设数据库有一张表名为student的表. 如果现在要你根据这张表,查出江西省男女个数,广东省男生个数,浙江省男女个数 怎么写SQL语句?即要生成下

mysql中 case when的使用

SELECT a.hsid, a.house_code, a.sale_date, a.pjid, COUNT( sdid ) AS num, b.hsid, b.pscid, b.hscode, b.hsarea1, b.hsrealarea1, b.hsusage, b.hsprice, b.hsstatus,sum(CASE WHEN b.hsrealarea1 >0THEN b.hsrealarea1ELSE b.hsarea1END)  as c , c.xzarea, c.lpmc,