1.判断外提的例子:
C++示例
for (i = 0;i<count;i++) {
if ( sumType == SUMTYPE_NET ) {
netSum = netSum + amount[ i ];
}
else {
grossSum = grossSum + amount[ i ];
}
}
循环外提后
if ( sumType == SUMTYPE_NET ) {
for (i = 0;i<count;i++) {
netSum = netSum + amount[ i ];
}
}
else {
for (i = 0;i<count;i++) {
grossSum = grossSum + amount[ i ];
}
}
c++节省19% (节省时间)
java 21% (节省时间)
vb <1% (节省时间)
2.哨兵值
C#示例:搜索循环中的组合判断
fount = FALSE;
i = 0;
while ( ( !found ) && ( i < count ) ) {
if ( item[ i ] == testValue ) {
found = TRUE;
}
else {
i++;
}
}
if ( found ) {
...
使用哨兵值来加速循环
initialValue = item[ count ];
item[ count ] = testValue;
i = 0;
while (item[ i ] != testValue ) {
i++;
}
//check if value was found
if ( i < count ) {
...
当item是一个整数数组的时候(查找对象是一个拥有100个整数元素的数组)
c# 23% (节省时间)
java 44%(节省时间)
vb 65%(节省时间)
当item是单精度浮点数时
c# 24%(节省时间)
java 33%(节省时间)
vb 42% (节省时间)
3.消减强度
Visual Basi示例:乘以循环下标
For i = 0 to saleCount - 1
commission( i ) = (i + 1) * revenue * baseCommission * discount
Next
用加不用乘
incrementalCommission = revenue * baseCommission * discount
cumulativeCommission = incrementalCommission
For i = 0 to saleCount - 1
commission( i ) = cumulativeCommission
cumulativeCommission = cumulativeCommission + incrementalCommission
Next
测试基准saleCount为20
c++ 12%(节省时间)
VB 49% (节省时间)
相关文章
[错误报告] [推荐] [收藏] [打印] [关闭] [返回顶部]


已有