c#代码优化性能优化

c#代码优化性能优化

ID:8967454

大小:16.89 KB

页数:5页

时间:2018-04-13

c#代码优化性能优化_第1页
c#代码优化性能优化_第2页
c#代码优化性能优化_第3页
c#代码优化性能优化_第4页
c#代码优化性能优化_第5页
资源描述:

《c#代码优化性能优化》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、C#代码优化性能优化自己所作的项目中开始慢慢接触到程序的优化部分,慢慢的对这些有了很多的理解。代码的书写规范化有助于团队中成员对你代码快速的理解。代码的优化有助于让程序运行速度更快一些。所以如下特转一些文字说明和本人的一些愚见。C#代码优化拾贝1、Float并不比Double要快软件测试和优化工作的一个重要原则是以实验为基础,一切以实验结果为准;我曾想当然的认为Float类型的位数少,理所当然应该比Double类型运算的要快。然而实验证明,这种想法是错误的;考察如下代码的速度:inti,j;floa

2、tf1=7.125f,f2=7.125f;doubled1=7.125d,d2=7.125d;DateTimedt=DateTime.Now;for(i=0;i<1000000000;i++){f1=f2/2.2f+12.3333f;}TimeSpants=DateTime.Now-dt;MessageBox.Show(ts.ToString());dt=DateTime.Now;for(i=0;i<1000000000;i++){d1=d2/2.2d+12.3333d;}ts=DateTime.N

3、ow-dt;MessageBox.Show(ts.ToString());运行这段代码,得到的结论是,Float类型和Double类型的运算速度完全一样;由此可见,如果把Double类型换成Float,程序的速度不会有任何提升;如果仅仅是这样,我们还可以接受Float,因为毕竟Float比较省内存;然而,Float很不争气,我发现了他的一个致命弱点,把Float转化成int花费的时间太长了,比把Double类型转成整形所花费的时间多了一倍;想要验证这点的话,把刚才的代码改成这样:inti,j;flo

4、atf1=7.125f,f2=7.125f;doubled1=7.125d,d2=7.125d;DateTimedt=DateTime.Now;for(i=0;i<1000000000;i++){//f1=f2/2.2f+12.3333f;j=(int)f1;}TimeSpants=DateTime.Now-dt;MessageBox.Show(ts.ToString());dt=DateTime.Now;for(i=0;i<1000000000;i++){//d1=d2/2.2d+12.3333d

5、;j=(int)d1;}ts=DateTime.Now-dt;MessageBox.Show(ts.ToString());在我们的组态元件的代码中,到处都是浮点转整形的运算(因为计算机图形需要光栅化,所以象素点坐标必须是整数),因此,如果我们使用Float类型的话,代码恐怕会非常的慢;2、右移和预计算优化是有效的如今网络上有一种呼声,说现在的编译器足够智能,会对代码自动地进行一些常见的优化,一些老的优化方法已经不再适用了,比如用右移代替除法运算、预计算等等;很可惜,如今的C#虽然具有一些编译优化的

6、功能,但还不象网络上所传颂的智能编译器那样的智能,经过实验发现,用右移代替除法运算、预计算等等技巧显然并未过时;经过实验发现:对于整形来说,右移一位确实比除以2要快一些,大约快了6%。至于预计算,经过实验发现,表达式的写法影响了C#的预计算功能,比如,i=j*(2d/3d)编译器就可以对其进行优化,编译的时候,编译器会先求出2d/3d的值,然后把结果0.66…编译到目标代码中,所以实际编译的代码等价于i=j*0.66…;而如果是i=j*2d/3d,编译器不会对其进行优化,所以,虽然两式运算结果完全相

7、同,但是运算速度却是大相径庭;如果充分的利用预计算功能,可以极大的提高代码执行速度,比如,角度转弧度的运算,是把角度先乘以圆周率然后除以180。通常按照自然习惯,会这样写j=k*Math.PI/180.0;上式的写法显然没有利用到C#的预计算功能,而如果改成下式:j=k*(Math.PI/180.0);就会发现,性能提高非常明显,大约快了70%;3、减少冗余计算优化前的代码如下所示,这是一个旋转点的函数,其中Sin(Angle),Cos(Angle)都各运算了两次,因此存在冗余计算。privateP

8、ointRotatePt(doubleangle,Pointpt){PointpRet=newPoint();angle=-angle;pRet.X=(int)((double)pt.X*Math.Cos(angle)-(double)pt.Y*Math.Sin(angle));pRet.Y=(int)((double)pt.X*Math.Sin(angle)+(double)pt.Y*Math.Cos(angle));returnpRet;}优化的代码的方法就是消除

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。