- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
如何提高代码的效率.ppt.ppt
如何提高代码的运行效率 鼎利研发部培训文档 2010 算法至上 优秀的算法,可以按数量级成千上万倍提高效率 例如求判断奇数还是偶数,有人用不断循环-2来求;有的用被2整除来求那个效率高? 求1-2+3-4+……N的和,如何效率最高? 查表法是最快的方法,能用则用 例如:求一个Byte型整数的阶乘/斐波那契/∑和,如何最快? 对性能要求高的,一定要考虑查找一份目前最快速有效的算法,对性能要求不高的,可以按容易实现的方式实现 空间←→时间 一般地,可以利用空间(内存)来换取时间效率的提高,算法上可以考虑一下如何利用内存来提高效率 例:高考分数线的划分? 也可以以时间来换取空间,根据实际需要而定 时间均化换效率 对于数据,可以预处理或者边处理边存储,可以有效防止在突发时间内处理大量数据的效率问题 把集中处理数据变化成在日常运行当中不断持续处理 例如数据按照非顺序不断发送,我们需要考虑在一开始就边顺序插入,二分法查找,避免在数据在以后集中处理时排序的浪费 解码工作,边下载边解码,提高效率 Google Earth的原理? 20级清晰度照片数据,用户需要时直接下发对应级别数据即可 核心代码优化 最核心的代码,循环次数最多的地方要进行优化,而只运行一次的代码,函数等,不必花很多时间进行优化; 一般来说,现在的CPU和编译器非常强悍,不需要我们太过关注代码的优化 提供给别人使用的代码、函数、DLL等,一定要考虑到性能优化问题! 公司的经验表明,常常是自己编写的代码模块需要给其他地方使用,结果出现瓶颈 设计的优化 架构设计保证优化 可扩充的方式 选择最有利的方式,例如程序之间数据交互,有管道,消息,COM接口,Socket,内存映射,文件等等方法,选择合适和最优的 利用多线程和多CPU 合理分割不同的业务逻辑,利用独立线程去运行比较独立的功能 多线程特别适合单独的线程来进行科学计算和运算! 影响界面更新的可以用独立的线程 少用内存分配操作 内存池和线程池 设计靠自己把握,需要有一定的经验,找出最优或者近似最优的方法、思路 利用查表法优化 查表法往往是最简单,最容易,也最有效率的算法 牺牲空间换时间 循环的优化 内层循环次数大,外层循环次数要少 把循环的判断减少 把循环体中的对象类似AObject.A.B.C.Value抽出来用一个变量引用C,效率可以提高 例子中那个效率高? 条件判断优化 容易判断和简单的写在前面,例如if ABool and (GetCondition(xxxx) = 100) then 比if (GetCondition(xxx) = 100) and ABool then 效率更高。为什么? Case/Switch语句中,把最有可能为True的放在前面。为什么? 数学运算优化 计算机最擅长的是位运算!乘除法都可以转换成位运算和+-操作 Inc(i); i++为什么可以提高效率? 判断奇偶数的代码: x and 1 = 1,效率是不是最高? PII以后的CPU据说乘法指令可以在一个周期内完成,未验证。 虽然CPU很强悍,但仍然需要考虑优化,因为可能你的代码需要在其他平台使用! 位操作运算 对于一些数据,可以转换成位操作的,就转换成位操作,效率可以大大提高 例如GSM解码: 输入数据是十六进制文本 可以在进入解码库的入口立即转换成二进制内存数组块,以后提取数据,直接是数组的第几个元素的第几个Bit,两三个指令周期即可搞定 以后对协议的解释,直接用Bit操作,效率会提高很多倍 浮点数优化 浮点数操作是比较慢的,乘法和除法更慢 除非是没有FPU的CPU,才需要针对浮点数进行特别优化,如RCU内部,PDA设备,嵌入式设备,手机等 浮点数可以转换成整数进行操作 现在的CPU,对浮点数+-操作和整数几乎没有区别,根据测试,100万次的浮点+-操作和整数性能一致 对定点浮点数,可以转换成整数,例如常见的RxPower, TxPower等,-75.6,可以把-75.6 * 100,变成整数-7560,以后可以按整数处理,提高效率 浮点数的时间TDateTime,可以变成基点 + 偏移的方式转换成整数进行处理 配有协处理器的CPU,一般情况下无需特别对浮点数优化 函数参数优化 能加Const就加Const,尽可能传递指针,不是采用值传递?为什么? 对于大内存块的参数,考虑转换一下,使用指针进行传递 适当扩大变量的作用范围,如使用类的私有变量,这样可以防止需要的数据再几个函数之间传来传去 参数太多的函数,考虑用记录+指针来代替 Register优化,C/C++标准是stdcall,Delphi的register方式更快,为什么寄存器方式更快? 界面优化(1/2) 降低界面的更新频度 例如对于有一个100万次的循环,每次都要更新进度,那么
您可能关注的文档
最近下载
- 第一章 2.2 水量平衡.ppt
- 《GB/T 19326-2022锻制支管座》.pdf
- 2022年11月陕西省从优秀村社区干部中考试录用200名乡镇街道机关公务员上岸冲刺卷I含答案详解版(3套).docx VIP
- 2020年银行业从业人员职业操守和行为准则.pdf VIP
- 转预备党员思想汇报【银行】.pdf VIP
- 【新教材】人教版(2024)七年级上册英语Unit 4 My Favourite Subject教案.docx
- 米厂恒温仓库工程设计方案.docx
- 2024年党校入党积极分子培训考试必考重点知识汇编(共160题).doc VIP
- 《世界经典神话与传说故事》 测试题及答案.pdf
- 智能制造设备安装与调试职业技能等级标准(2021年).pdf
文档评论(0)