asp代码优化,.net后端优化
(1)选择会话状态存储模式。
在Webconfig文件中配置:
sessionState mode=?stateConnectionString= tcpip=127 . 0 . 0 . 1:42424
sqlConnectionString= data source=127 . 0 . 0 . 1;Trusted_Connection=yes
cookieless= false time out= 20 /
Asp.net有三种方法来存储会话状态信息:
1.存储在进程中:属性模式=InProc
特点:性能最好,速度最快,但不能跨多台服务器存储和共享。
2.存储在状态服务器中:属性模式=StateServer
特性:当需要跨服务器维护用户会话信息时,可以使用这种方法。
但是,信息是存储在状态服务器中的,一旦状态服务器出现故障,信息就会丢失。
3.存储在Sql Server中:属性模式=SqlServer
特点:工作量会增加,但信息不会丢失。[/COLOR]
补充一点:
I .由于一些页面不需要会话状态,您可以禁用会话状态:
代码如下:% @ pageenablesession state= false %
二。如果页面需要访问会话变量,但不允许修改它们,可以将页面会话状态设置为只读:
代码如下:% @ pageenablesession state= false %
使用时可以根据具体情况选择一定的方式。
(二)。使用页面。时
页面。IsPostBack指示它是否从客户端返回。当它第一次运行时,它不会从客户端返回,它的值
当页面上的事件被触发或页面被刷新时。IsPostBack变为true,因为它是回发;
一般情况下:Page_Load方法,使用:
私有void Page_Load(对象发送方,EventArgs e)
{
如果(!页面。IsPostBack)
{
.//初始化页面的代码。这些代码在页面第一次初始化时执行。当页面第二次被回发时,
//不会再执行了。提高效率。
}
}
我经常不得不使用IsPostBack,因为有些控件需要在初始化后保持它们的状态。
比如DropDownList,如果每次都初始化,那么无论用户选择哪个选项,都会初始化为默认值。
(三)。避免使用服务器控件
1.一般静态显示信息,尽量不要用服务器端控件来显示。因为服务器端控件需要回发到服务器以供执行,
会降低程序执行的效率。一般可以用DIV显示。
如果使用服务器端控件,移除:runat=server 也会提高效率。
2.禁用服务器端控件的状态视图。有些控件不需要维护其状态,可以设置其属性:EnableViewState=false
如果整个页面控件不需要维护状态视图,可以将整个页面的状态视图设置为false:
代码如下:%@ Page EnableViewState=false%
3.在Web中配置。配置文件:
ASP。NET会话可以在Web.config或Machine.config的Sessionsstate元素中配置.
下面是Web.config中的设置示例:
session state time out= 10 cookieless= false mode= in proc /
(四)。避免使用数据网格
每个人都知道数据网格是强大的。然而,虽然它功能强大,但却增加了性能成本。常规其他控件:数据列表
或者中继器控制,尽量不要用DataGrid。
(5).字符串操作
1.避免包装操作。包装操作效率低下。
例如,运行两个代码段:
字符串测试=“”;
for(for int I=0;我10000;我)
{
测试=测试I;
}
和
字符串测试=“”;
for(for int I=0;我10000;我)
{
test=test I . ToString();
}
下面这段代码显然效率更高。因为I是整数,所以系统需要将I装箱,转换成字符串后再连接。这需要时间。
读者可以将其复制到自己的机器上进行测试。
2.使用StringBulider类
在字符串连接中:字符串str=str1 str2.
一般来说,如果有三个以上的连接,最好使用StringBuilder而不是String class。StringBuilder可以避免再次创建String对象。
性能损失。
一般在组装Sql语句时使用:StringBulider。
读者可以在自己的机器上测试。
3.尽可能少用:
尝试
{}
捕捉
{}
最后
{}
声明。这个语句的执行效率比较低。
优化使用。阿多。网
1.数据库连接被打开和关闭。需要时打开连接,访问数据库后立即关闭连接。
例如,看两个代码片段:
爱达荷(Idaho的缩写)
数据集ds=新数据集();
SqlConnection my connection=new SqlConnection( server=localhost;uid=sapwd=;database=north wind’);
SqlCommand my command=new SqlCommand(strSql,my connection);
sqldata adapter my adapter=new sqldata adapter(query str,connectionStr);
我的连接。open();//打开连接
for(int I=0;i 1000I)//用于数据采集前业务逻辑操作的循环模拟。
{
线程。睡眠(1000);
}
我的适配器。填充(ds);
for(int I=0;i 1000I)//用于数据采集后业务逻辑操作的循环模拟。
{
线程。睡眠(1000);
}
我的连接。close();//关闭连接
二。
数据集ds=新数据集();
SqlConnection my connection=new SqlConnection( server=localhost;uid=sapwd=;database=north wind’);
SqlCommand my command=new SqlCommand(strSql,my connection);
sqldata adapter my adapter=new sqldata adapter(query str,connectionStr);
for(int I=0;i 1000I)//用于数据采集前业务逻辑操作的循环模拟。
{
线程。睡眠(1000);
}
我的连接。open();//打开连接
我的适配器。填充(ds);
我的连接。close();//关闭连接
for(int I=0;i 1000I)///用于数据采集后业务逻辑运算的循环模拟。
{
线程。睡眠(1000);
}
显示码II比I码好多了,I早早就占了连接。如果用户很多,连接池很容易就满了。严重的时候就崩溃了。
2.数据库查询
I .直接生成SQL语句。Sql Server每次都要编译,所以性能不会有太大提升。况且还不够安全。容易受到攻击。
二。使用带参数的SQL命令。这样,Sql Server只编译一次,编译后的命令可以重复用于不同的参数。提高性能。
三。使用Sql Server存储过程。编译一次。它是独立的,易于修改和维护。可以一次完成多次发送语句的功能。它降低了网络的
流动。存储过程不一定比语句更有效。如果业务逻辑很复杂,有时语句比存储过程更有效。
(6)缓存优化
有两种类型的缓存:页面缓存和API缓存。
1.使用页面缓存和片段缓存。
%@ OutputCache持续时间=5 VaryByParam=None%
% @ output cache Duration=60 VaryByParam=" textbox 1,TextBox2" %
描述:Duration是设置缓存的到期时间;
VarByParam是设置是否根据参数而改变。无时,所有参数使用相同的缓存。
设置TextBox1时,根据TextBox1的不同值进行缓存;当有多个参数时,缓存应该合并;
2.API缓存。应用中使用。
一.缓存使用示例:
http://blog..net/chengking/archive/2005/10/03/494545.aspx
二。注意页面之间的区别。缓存和HttpContext。当前。使用时缓存:
它们指的是同一个对象。在Page中,使用Page。如果在global.asax或您自己的类中使用它,请使用:HttpContext。当前缓存
在某些情况下,因为没有HttpContext,HttpRuntime。使用缓存。