16 程序性能调优.ppt
第十六章 程序性能调优 安全编程技术,其本质是要编写安全的程序。但是,实际上,安全是一个广泛的概念,除了在功能上需要能够不出现隐患外,在性能上也需要能够不为隐患提供出现的可能。特别是在某些情况下,性能调优显得格外重要。如果程序性能不好,也可能导致某些方面的安全问题。因此,性能调优是保证程序安全的一个重要方面。 本章基于一些流行的编程语言,讲解一些性能调优方面的编程技巧。性能调优方面的讲解包括以下几个方面: 数据优化。主要是编程过程中数据使用上的调优,如变量赋值、字符串、数据结构优化等。 算法优化。主要是对运算过程进行优化,如基本算术运算、运算流程上的优化等。 应用优化。针对异常处理、单态对象、享元对象、WEB程序、线程操作进行优化。 大量的软件中都用到了数据库,数据库的访问速度直接影响到程序的运行性能安全性,本章也对数据库访问过程中的优化问题进行了讲解。 应该指出的是,本章内容只是一些技巧的举例,并不能代表所有的代码优化技术。本章的目的是为了让读者知道代码优化的重要性以及掌握一些常见的技巧。 不过,代码的优化有时候是以程序的可读性甚至程序安全性为代价的,在开发的过程中,一定要权衡好两者之间的利弊关系,采用适当的优化方法。 16.1 数据优化 16.1.1 优化变量赋值 一般说来,由于局部变量用完之后释放,因此有些作用范围较大的变量操作,改为局部变量来实现,有助于节省宝贵的系统资源。 如下代码: 该代码是求1到1000的和,变量sum作为类成员变量,在循环中对其进行反复读取,由于对局部变量进行读取,消耗资源较少,因此,我们可以将这个读取过程交给局部变量去做,代码如下: 该代码中,对sum的读取和赋值变为了对局部变量temp的访问。 16.1.2 优化字符串 由于字符串的特殊性和灵活性,字符串的优化应用较广。 首先,由于字符串的池机制,字符串的初始化(分配内存过程)就可以优化。 看如下代码: 该代码中,系统实例化一个新的对象str,为其分配内存空间。但是由于字符串使用了池机制,可以将上面的代码优化如下: 此代码中,系统首先检查池中有无“China”,如果有,系统将直接使用池中的字符串,而不用新分配内存空间。 一般情况下,由于字符串常量的出现都会附带为其分配内存空间,因此,能够避免字符串常量出现的场合,可以尽量避免。 如下代码: 该代码将字符串s和空字符串相比较,虽然空字符串中没有内容,但是也要占用字符串所规定的内存空间。 因此,我们可以用如下代码加以避免: 又如,如下代码: 该代码中,字符串str中只包含一个逗号,如果用字符串的形式来保存,比用字符形式保存消耗的资源要多。 因此,该代码可以作如下优化: 将逗号用字符来表示,节省系统资源。 值得一提的是,在对多个字符串进行操作或对一个字符串进行修改时,用StringBuffer比用String要好。 如下代码: str3将保存str1和str2连接在一起的结果,系统将为str3额外分配内存。为了避免这个额外的资源消耗,代码可以优化如下: 这样,就不需要为两个字符串连接的结果额外分配内存。当然,此时带来的代价是:前面那个字符串的内容丢失了。 16.1.3 选择合适的数据结构 在实际开发的过程中,选择一种合适的数据结构很重要。比如:有一堆随机存放的数据,如果经常在其中进行插入和删除操作,那使用链表较好;如果要经常进行读取,并且数据个数固定,则使用数组较好。 这里需要注意的是,在高级语言中,大部分语言中虽然提供了同样功能的API,但是底层实现机制不同,操作性能大不相同,而不是从表面就可以看出来的。如Java语言中: ArrayList和LinkedList,提供了功能类似的API,如对元素的增删改查。但是前者采用数组方式存储数据,后者采用链表方式存储数据,在数据大量进行添加删除时效果不一样; ArrayList和Vector,后者实现了线程同步,在没有线程要求时适合用前者,因为速度较快;多个线程访问同一个Vector时适合用后者,因为可以保证数据安全;等等。 又如在C中,数组与指针语句具有十分密切的关系,一般来说,指针的好处是比较灵活简洁,而数组则比较直观,容易理解。与数组索引相比,指针一般能使代码速度更快,占用空间更少。另外,对于大部分的编译器,使用指针比使用数组生成的代码更短,执行效率更高。这种情况,在使用多维数组时差异更明显。 下面的代码作用是相同的,但是效率不一样。 数组索引: 指针运算: 16.1.4 使用尽量小的数据类型 为了保证空间不被浪费,在使用数据类型的过程中,可以做到: 能够使用字符型 (char) 定义的变量的情况下,就不要使用整型(int)变量来存储数据; 能够使用整型(int)变量
您可能关注的文档
- 12.16初一英语上学期期末考试题(二).doc
- 12.29立体几何综合训练.doc
- 12.29高一上学期数学期末试卷.doc
- 120106人事刷卡系統設定.docx
- 发酵岗位系统.doc
- 12312-3、《李泽尧:筹码理论——你不得不知的商场密器》.doc
- 12条成功的交易法则.doc
- MBA 领导学46页doc.doc
- 吃核桃治咳嗽.doc
- 12第十二章 滑移线法.ppt
- 中国水墨风马年年终总结汇报PPT模板.pptx
- 企管部长2025年工作总结及2026年度工作规划思路.docx
- 排污许可证管理及重污染天气政策解读培训.pptx
- 马年春节2026新年会策划年终总结汇报述职报告模板.pptx
- 2026新年红色喜迎马年节日介绍主题班会.pptx
- 单元一 汽车溯源(课件)-《汽车文化》同步教学(人民交通出版社).pptx
- 6.3汽车俱乐部(课件)-《汽车文化》同步教学(江苏凤凰教育出版社).pdf
- 6.3汽车与交通(课件)-《汽车文化》同步教学(武汉大学出版社).pdf
- 5.1汽车竞赛概述(课件)-《汽车文化》同步教学(武汉大学出版社).pdf
- 5.1汽车发展与社会--(课件)-《汽车文化》同步教学(国防科技大学出版社).pdf
原创力文档

文档评论(0)