提高程序性能

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中提高程序性能的方法研究

(13级教育技术学王霞 20131212)

摘要:文章从程序编码优化、数据操作优化和配置优化三个方面简要介绍了网站优化的基本方法,以便提高程序性能,为网站设计者提供参考。

关键字:提高程序性能;网站优化;网站

一、引言

众所周知,网站程序的运行效果直接影响着网站的质量和推广,网站性能差,致使用户访问网页时等待时间过长、响应过慢、均会成为用户流失的潜在因素。因此网站优化就显得尤为重要。如何提高程序性能也就成为了需要网站设计者深入细致研究的重要问题。文章从程序编码优化、数据操作优化和配置优化三个方面对如何提高程序性能做了基本介绍,具体方法如下:

二、程序编码优化

从编码方面优化程序性能主要从三方面入手:

(一)集合操作

.NET 框架提供了诸如ArrayList、Hashtable、Dictionary 等集合类型。要了解各个集合的特性,选择合适的集合。在所有的集合中数组是性能最高的,如果要存储的数据类型一致和容量固定,特别是对值类型的数组进行操作时没有装箱和拆箱操作,效率极高。在集合数目固定的情况下,数组的存取效率最高,泛型次之,ArrayList 最慢。

在选择集合类型时应考虑几点:

1.集合中的元素类型是否是一致的,比如集合中将要存储的元素都是int或者都是string 类型的就可以考虑使用数组或者泛型集合,这样在存储数值类型元素就可以避免装箱拆箱操作,即使是引用类型的元素也可以避免类型转换操作。

2.集合中的元素个数是否是固定的,如果集合中存储的元素是固定的并且元素类型是一致的就可以使用数组来存储。

3.将来对集合的操作集中在那些方面,如果对集合的操作以查找居多可以考虑HashTable或者Dictionary这样的集合,因为在.NET Framework中对这类集合采用了特殊机制,所以在查找时比较的次数比其它集合要少。

另外,在使用可变集合时如果不制定初始容量大小,系统会使用一个默认值来指定可变集合的初始容量大小,如果将来元素个数超过初始容量大小就会先在内部重新构建一个集合,再将原来集合中的元素复制到新集合中,可以在实例化可变集合时指定一个相对较大的初始容量,这样在向可变集合中添加大量元素时就可以避免集合扩充容量带来的性能损失。(二)字符串操作

在.NET Framework中String类是一个比较特殊的类,我们知道值类型变量直接在栈中分配内存来存储变量的值,并且不需要垃圾回收器来回收,大部分引用类型变量是在堆中分配内存来存储变量的值,在不再使用的情况下会被垃圾回收器回收所占用的内存。String 类型的变量虽然是引用类型变量(常用的赋值方式却很类似于值类型变量的赋值方式,如string a=”123”),但是CLR(Common Language Runtime,通用语言运行时)通过了一种特

殊的方法来存放字符串,CLR会维护一个会自动维护一个名为“拘留池”(intern pool,不知道为什么微软会这么叫) 的表,它包含在程序中声明的每个唯一字符串常数的单个实例,以及以编程方式添加的String 的任何唯一实例。该拘留池节约字符串存储区。如果将字符串常数分配给几个变量,则每个变量设置为引用“拘留池”(intern pool) 中的同一常数,而不是引用具有相同值的String 的几个不同实例。

在给字符串变量赋值时会首先在“拘留池”中检查是否有与要赋值的值相等的字符串,如果存在就会返回该字符串的引用,如果不存在就向字符串“驻留池”中添加该字符串,并且将该字符串的引用返回。这样一来在每次连接字符串时都有可能创建新的字符串对象(如果“驻留池”中不存在对应的字符串的话),从而导致了性能低下。

在String类有个方法专门用来检测“拘留池”中是否存在指定字符串引用的方法,这个方法就是IsInterned(string str)方法,如果存在这个引用则返回str的引用,如果不存在这个引用就返回null。

在需要多次连接字符串时可以考虑使用System.Text.StringBuilder对象,这是一个可变容量的字符串对象。在实例化StringBuilder对象时会指定一个容量(如果不显示指定,则系统默认会指定初始容量为16,如果在程序中最终连接后的容量大于这个值可以自行指定一个较大的值作为初时容量,这样也能提高性能),在进行添加、插入及替换等修改操作时如果不超过容量,则会直接在缓冲区中操作,如果超过容量则会重新分配一个更大的缓冲区,并将原来的数据复制到新缓冲区。

(三)数据类型转换

在开发中经常会遇到类型转换的问题,一种情况是由字符串类型转换成数值类型,另一种情况是存在继承关系或者实现关系的类之间进行类型转换。在上面的两种转换中如果存在不能转换的情况,则会抛出异常,在引发和处理异常时将消耗大量的系统资源和执行时间。引发异常是为了确实处理异常情况,而不是为了处理可预知的时间或控制流(这一点尤其要注意,不要在代码中来使用异常进行流程控制)。

1.字符串类型向值类型转换

在.NET Framework2.0版本以前将字符串类型转换成数值类型都是使用Parse()方法,如int.Parse("123")、char.Parse("a")及bool.Parse("TrueString")等等,如果出现了指定的字符串不能转换成相应的数值类型时就会抛出异常,可能会对性能造成不良的影响。在.NET Framework2.0及以后版本中增加了TryParse()方法,减小了性能问题。TryParse()方法使用了两个参数:第一个参数是要转换成数值类型的字符串,第二个参数是一个带有out关键字的参数,并且这个方法有返回值,指示指定的字符串是否能转换成相应的数据类型。如果指定的字符串能转换成相应的数据类型则方法返回true,out参数就是指定字符串转换成相应数值的结果,否则方法返回false,表示不能进行转换而不会抛出异常。

2. 使用Server.Transfer()方法

使用Server.Transfer()方法实现同一应用程序下不同页面间的重定向可以避免不必要的客户端页面重定向。它比Response.Redirect()方法性能要高,并且Server.Transfer()方法具有允许目标页从源页中读取控件值和公共属性值的优点。由于调用了这个方法之后浏览器上不会反应更改后的页的信息,因此它也适合以隐藏URL的形式向用户呈现页面,不过如果用

相关文档
最新文档