繁体中文】 【设为首页】 【加入收藏

提高程序运行速度的代码调整方法

2007-12-02 01:52:28 作者:dream 来源:code2 浏览次数:0 网友评论 0

1.判断外提的例子:C++示例for (i = 0;i<count;i++) {  if ( sumType == SUMTYPE_NET ) {    netSum = netSum + amount[ i ];  }  else {    grossSum = grossSum + amount[ i ];  }}循环外提后if ( sumType == ...

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% (节省时间)

[错误报告] [推荐] [收藏] [打印] [关闭] [返回顶部]

  • 验证码:

最新图片文章

最新文章