C#代码优化拾贝

发表于:2010-9-01 13:13

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:qiqi5521(cnblogs)    来源:51Testing软件测试网采编

  1、Float并不比Double要快

  软件测试和优化工作的一个重要原则是以实验为基础,一切以实验结果为准;我曾想当然的认为Float类型的位数少,理所当然应该比Double类型运算的要快。然而实验证明,这种想法是错误的;

  考察如下代码的速度:

int i,j;
float f1=7.125f,f2=7.125f;
double d1=7.125d,d2=7.125d;
DateTime dt = DateTime.Now;
for ( i = 0; i < 1000000000; i++ )
{
f1 =  f2 / 2.2f +12.3333f;
}
TimeSpan ts = DateTime.Now - dt;
MessageBox.Show ( ts.ToString() );
dt = DateTime.Now;
for ( i = 0; i < 1000000000; i++ )
{
d1 = d2 / 2.2d +12.3333d;
}
ts = DateTime.Now - dt;
MessageBox.Show(ts.ToString());

  运行这段代码,得到的结论是,Float类型和Double类型的运算速度完全一样;由此可见,如果把Double 类型换成Float,程序的速度不会有任何提升;

  如果仅仅是这样,我们还可以接受Float,因为毕竟Float比较省内存;

  然而,Float很不争气,我发现了他的一个致命弱点,把Float转化成int花费的时间太长了,比把Double类型转成整形所花费的时间多了一倍;

  想要验证这点的话,把刚才的代码改成这样:

int i,j;
float f1=7.125f,f2=7.125f;
double d1=7.125d,d2=7.125d;
DateTime dt = DateTime.Now;
for ( i = 0; i < 1000000000; i++ )
{
//f1 =  f2 / 2.2f +12.3333f;
j = (int)f1;
}
TimeSpan ts = DateTime.Now - dt;
MessageBox.Show ( ts.ToString() );
dt = DateTime.Now;
for ( i = 0; i < 1000000000; i++ )
{
//d1 = d2 / 2.2d +12.3333d;
j = (int)d1;
}
ts = DateTime.Now - dt;
MessageBox.Show(ts.ToString());

  在我们的组态元件的代码中,到处都是浮点转整形的运算(因为计算机图形需要光栅化,所以象素点坐标必须是整数),因此,如果我们使用Float类型的话,代码恐怕会非常的慢。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号