使用ASP.NET2.0开发的网站,是特别的消耗服务器的CPU,会导致应用程序池的资源被全部占用而出现service unavailable,甚至是网站无法正常打开。
同样,如果你的ASP.NET2.0网站所使用的数据库又是MS SSQL的话,那么,这真的是绝配了,前者就占资源了,后者同样也不是省油的灯,也特别占资源,稍有设置上的不当,那么,问题也就出来了。
下面,针对初学的人,本站为大家介绍如何优化asp.net2.0的程序。
1、性能优化之最
<compilation debug="false">
注意哦,在配置文件中,如果网站已发布,那么,请记得将debug设置为false,否则,网站访问速度将变得很慢。
2、Session的优化
• 若要禁用页的会话状态,请将@ Page 指令中的EnableSessionState 属性设置为false。例如,<%@ Page EnableSessionState="false" %>。
• 注意如果页需要访问会话变量,但不打算创建或修改它们,则将@ Page 指令中的EnableSessionState 属性设置为ReadOnly。还可以禁用XML Web services 方法的会话状态。有关更多信息,请参见使用ASP.NET 和XML Web services 客户端创建的XML Web services。
• 若要禁用应用程序的会话状态,请在应用程序Web.config 文件的sessionstate 配置节中将mode 属性设置为off。例如,<sessionstate mode="off" />。
3、尽量使用客户端脚本
通常,只有在检索或存储数据时,您才需要启动到服务器的往返过程。多数数据操作可在这些往返过程间的客户端上进行。
4、使用Page.IsPostback避免对往返过程执行不必要的处理
• 如果您编写处理服务器控件回发处理的代码,有时可能需要在首次请求页时执行其他代码,而不是当用户发送包含在该页中的HTML 窗体时执行的代码。根据该页是否是响应服务器控件事件生成的,使用Page.IsPostBack 属性有条件地执行代码。
• 注意如果不运行这种检查,回发页的行为将不更改。Page_Load 事件的代码在执行服务器控件事件之前执行,但只有服务器控件事件的结果才可能在输出页上呈现。如果不运行该检查,仍将为Page_Load 事件和该页上的任何服务器控件事件执行处理。
5、在适当的环境中使用ASP.NET 服务器控件
检查您的应用程序代码以确保对ASP.NET服务器控件的使用是必要的。即使它们非常易于使用,但是服务器控件并不总是完成任务的最佳选择,因为它们会使用服务器资源。在许多情况下,一个简单的呈现或数据绑定代入就可以完成任务。
6、使用值类型的ToString方法
在连接字符串时,经常使用"+"号直接将数字添加到字符串中。这种方法虽然简单,也可以得到正确结果,但是由于涉及到不同的数据类型,数字需要通过装箱操作转化为引用类型才可以添加到字符串中。但是装箱操作对性能影响较大,因为在进行这类处理时,将在托管堆中分配一个新的对象,原有的值复制到新创建的对象中。
使用值类型的ToString方法可以避免装箱操作,从而提高应用程序性能。
int num=1;
string str="go"+num.ToString();
7、运用StringBuilder类
String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显著。
在处理字符串时,最好使用StringBuilder类,其.NET 命名空间是System.Text。该类并非创建新的对象,而是通过Append,Remove,Insert等方法直接对字符串进行操作,通过ToString方法返回操作结果。
其定义及操作语句如下所示:
int num;
System.Text.StringBuilder str = new System.Text.StringBuilder(); //创建字符串
str.Append(num.ToString()); //添加数值num
Response.Write(str.ToString); //显示操作结果
8、避免使用ArrayList
因为任何对象添加到ArrayList都要封箱为System.Object类型,从ArrayList取出数据时,要拆箱回实际的类型。建议使用自定义的集合类型代替ArrayList。asp.net 2.0提供了一个新的类型,叫泛型,这是一个强类型,使用泛型集合就可以避免了封箱和拆箱的发生,提高了性能。