减少冗余计算的优化对比
来源:互联网 发布:假人秒进群qq数据 编辑:程序博客网 时间:2024/06/09 21:00
优化前的代码如下所示,这是一个旋转点的函数,其中Sin(Angle),Cos(Angle)都各运算了两次,因此存在冗余计算。
通过2次优化 效率有 2.2秒 提升到 1.7秒,再提升到1.5秒。冗余计算优化还是非常有效果的
using System;using System.Drawing;namespace speed{ class Program { static void Main(string[] args) { int i; Point pt = new Point(15, 78); double angle = 45d; DateTime dt = DateTime.Now; for (i = 0; i < 10000000; i++) { RotatePt_1(angle, pt); } TimeSpan ts = DateTime.Now - dt; Console.WriteLine("RotatePt_1 cost time {0}", ts.ToString()); dt = DateTime.Now; for (i = 0; i < 10000000; i++) { RotatePt_2(angle, pt); } ts = DateTime.Now - dt; Console.WriteLine("RotatePt_2 cost time {0}", ts.ToString()); dt = DateTime.Now; for (i = 0; i < 10000000; i++) { RotatePt_3(angle, pt); } ts = DateTime.Now - dt; Console.WriteLine("RotatePt_3 cost time {0}", ts.ToString()); Console.Read(); } static Point RotatePt_1(double angle, Point pt) { Point pRet = new Point(); 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)); return pRet; } static Point RotatePt_2(double angle, Point pt) { Point pRet = new Point(); angle = -angle; double SIN_ANGLE = Math.Sin(angle); double COS_ANGLE = Math.Cos(angle); pRet.X = (int)(pt.X * COS_ANGLE - pt.Y * SIN_ANGLE); pRet.Y = (int)(pt.X * SIN_ANGLE + pt.Y * COS_ANGLE); return pRet; } static Point RotatePt_3(double angle, Point pt) { angle = -angle; double SIN_ANGLE = Math.Sin(angle); double COS_ANGLE = Math.Cos(angle); return new Point((int)(pt.X * COS_ANGLE - pt.Y * SIN_ANGLE), (int)(pt.X * SIN_ANGLE + pt.Y * COS_ANGLE)); } }}
RotatePt_1 cost time 00:00:02.2381280
RotatePt_2 cost time 00:00:01.7471000
RotatePt_3 cost time 00:00:01.5130866
- 减少冗余计算的优化对比
- c#编译器的减少冗余代码优化
- 比特币挖矿算法优化-(1.减少冗余计算;2.sat 布尔可满足性问题)
- 减少冗余的小技巧
- 使用APT减少MVP的冗余代码
- 报表性能优化专题二—减少冗余单元格
- C++编码优化之减少冗余拷贝或赋值
- 善用 HTML 的 BASE 属性 减少冗余 By Stabx
- 程序如何做到代码复用,减少代码冗余,从而减少代码修改的成本?
- React Native之如何优化组件来达到减少代码冗余
- 循环冗余计算的效验码
- 用 Groovy 减少代码冗余
- 基于减少计算量的MFCC提取
- 类设计要点: 变量/函数的命名要泛化,减少代码”冗余“
- UI组件设计:减少冗余代码--类继承关系的考量
- 解决Android中顶部title功能重复问题,减少代码冗余的功能
- 计算循环冗余码
- 纯虚类加修饰符__declspec(novtable)减少冗余
- 微博兴起时,博客这个大家伙就放弃了
- eclipse 下环境变量设置
- 数据连接池
- eclipse导入工程出现 Unbound classpath variable Error .
- thinking in java(VIII)--containers,exceptions,I/O,RTTI
- 减少冗余计算的优化对比
- WIN7意想不到的强大功能
- 项目心得
- 如何进行java系统优化
- OpenVPN关于push-peer-info的实现
- C#之P/Invoke
- C语言中字符数组和字符串指针分析
- Qt程序 与 CMD窗口弹出的控制
- Hello Android学习之SQLite(二)