程序优化那些事儿.ppt

  1. 1、本文档共47页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序优化那些事儿

一个例子 一个例子 优化结果 性能分析 平台优化 程序优化的三个层次 程序架构优化 程序架构:轮询/触发、多线程/单线程、共享内存/管道、同步/异步 优点:能够从根本上解决性能问题 缺点:改动大,成本高,并且可能造成程序的不稳定 61850服务器端处理报告的方式: sisco默认的是定期向装置读取所有报告中配置的数据,扫描周期可以配置。扫描周期长了,数据上送的慢;短了,cpu受不了。 咱们装置可以主动上送变化数据,后来改成触发模式,上送速度快且cpu占用低。 61850客户端下发请求的方式: 采用异步请求方式,在等待请求返回的时候不耽误其他工作 程序逻辑优化 逻辑优化一般只涉及到模块内的功能的调整,对程序整体影响较小,且往往能同时提高运行速度、减小程序体积、提高程序的可维护性。 1. 去除程序中无用的逻辑处理, 去除cosmos初始化过程中的getalldatavalue过程 2. 根据业务特点,舍弃部分通用性和模块性 asn1固定长度的编码 asn1_parse函数 3. 按照业务逻辑流程定制程序流程 gsv_on_recved_gooseMessage 4. 合并同类数据的处理,减少程序执行次数 如客户端处理报告的方法,缓存零散报告,统一处理; 如客户端调定值的处理,一次下发多个定值请求 代码优化-概述 代码优化-降低运算的强度 1.用移位操作代替乘除法 a=b/8;改为:a=b3; a=a*8;改为:a=b3; a=b%8;改为:a=b7; a=a*9;改为:a=b3+b 位操作只需一个指令周期即可完成,而大部分的C编译器的乘除运算均是调用子程序来完成,代码长、执行速度慢。 代码优化-降低运算的强度 2.用加法代替乘法 for (i = 0;i MAX;i++) h = 14 * i; for (i = h = 0;i MAX;i++) h += 14; 3.合并除法以减少除法的次数 double x = a/b/c; 优化成double x = a/(b*c) double x = a/b + c/b; 优化成 double x = (a+c)/b 代码优化-降低运算的强度 4.如果被除数比除数大的倍数不多,可以用减法代替除法。 int x = 200; int y = 70; int a = x/y; int b = x%y; 优化后: int x1 = 200; int y1 = 70; int a1 = 0; int b1 = x; while(b1=y1){ b1 -= y1; a1++; } 代码优化-降低运算的强度 5.用乘法代替除法 double x = a/b; double y = c/b; 优化后: double tmp = 1/b; double x = a*tmp; double y = b*tmp 6.在误差允许的情况下,采用近似计算除法 比如颜色处理时,uint 8 color = a/255;优化成uint8 color=a/256即 a8。 代码优化-降低运算的强度 6.整数代替浮点数 7.按需选择赋值符号 a=a+1要写为a++;? a=a+b要写为a+=b,后者生成的汇编指令更少 8.查表法 彩图转换黑白图的例子 如果表很大,不好写,就写一个init函数,在循环外临时生成表格。 如果怕初始化时间太长,或者用到的点比较少且比较固定,可以在用到的时候再计算,存到表里。 代码优化-函数 1.使用宏定义代替函数定义 #define asn1_GetBOOL(pdata, punit, value) \ { \ value = pdata[(punit)-offset] 0x01; \ } 优点:避免函数调用带来的开销 :传递参数的开销和保存当前程序上下文信息所花费的开销,函数越复杂需要花费的开销就越大 缺点:1.使用这种方法在优化程序速度的同时,却增加了内存的开销,因为在每个应用宏的地方宏都会展开;2.无法跟踪调试;3.宏可读性比较差,容易出现问题 代码优化-函数 2.减少函数的参数个数,把多个参数合成一个结构体,或者使用全局变量代替 ,传递的参数越多开销越大 3.用合适参数传递方法,数据结构等体积较大的参数,传递指针 4.不需要返回值时,声明返回值为void 代码优化-if判断 If判断的特点: 1.从左到右对表达式求值; 2当结果确定后就不再计算其他

您可能关注的文档

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档