您的位置:首页 > 运维架构 > 网站架构

网站性能优化解决方案

2007-07-10 14:42 633 查看
一、性能参数:
1、 吞吐量
2、 响应时间
3、 执行时间
4、 可伸缩性

二、性能优化方案:
[align=center]编号[/align]
[align=center]方案[/align]
[align=center]说明[/align]
[align=center]状态[/align]
[align=center]1[/align]
在部署应用程序时,应该关闭Debug模式,这将有效提高应用程序性能(web.config文件的debug=false)
[align=center]2[/align]
在部署应用程序时,使用RELEASE模式进行编译发布,优化程序资源!
[align=center]3[/align]
尽量避免使用throw Exception,减少额外的开销

提供用户一个友好的出错页面
[align=left]protected void Application_Error(Object sender, EventArgs e)[/align]
[align=left]{[/align]
[align=left] …….[/align]
[align=left] Application["error"] = error;[/align]
[align=left] Response.Redirect("MyErrorPage.aspx");[/align]
}
由于捕获的异常,所以性能提升不大,但提供了统一的友好的出错信息页面
[align=center]4[/align]
对适当的动态页面进行页面级缓存<%@ OutputCache Duration="60" VaryByParam="*" %>,提高访问速度!

两种情况:
1. 按照参数不同,进行不同版本的缓存
2. 按照URL不同,进行不同版本的缓存
例如:
http://010.52tong.com
http://021.52tong.com

Aspx页面中:
<%@ OutputCache Duration="300" VaryByParam="id" VaryByCustom="ceshi" %>

Global.asax中:
[align=left]public override string GetVaryByCustomString(HttpContext context, string arg)[/align]
[align=left]{[/align]
[align=left] if (arg == "ceshi")[/align]
[align=left] {[/align]
[align=left] string s_cs=Request.Url.ToString();[/align]
[align=left] return Request.Url.ToString() ;[/align]
[align=left] }[/align]
[align=left] return base.GetVaryByCustomString( context, arg);[/align]
}
[align=center]5[/align]
尽量使用存储过程完成数据操作
[align=center]6[/align]
对于只读的数据访问, 使用DateReader代替DataSet
[align=center]7[/align]
关闭不必要的ViewState
使用 ViewState 时,每个对象都必须先序列化到 ViewState 中,然后再通过回传进行反序列化,因此使用 ViewState 并非是没有代价的。<input type="hidden"
没有进行加密,ViewState 只是进行了 Base64 编码
每个控件(在标记上) <asp:datagrid EnableViewState="false" ?/>
每个页面(在指令中) <%@ Page EnableViewState="False" ?%>
每个应用程序(在 web.config 中) <Pages EnableViewState="false" ?/>

[align=center]8[/align]
调整数据库SQL语句
前提:需要在完全理解业务逻辑的情况下
[align=center]9[/align]
调整索引
小测试,说明索引的重要性,虽然执行时间只是从3毫秒降到了0毫秒,但只是对于测试环境单用户而言,当成千上万的用户并发操作,造成服务器资源竞争激烈(内存IO/磁盘IO/CPU的上下文切换),CPU的执行时间应该会以几何级的速度增长!

select count(*) from dbo.公交
--12120笔记录

/*------目前没有索引的状况
Table Scan 全表扫描
逻辑读 256 次
执行时间 3 毫秒-------*/
set showplan_all on
go
select * from dbo.公交 where city='宣城'
go
set showplan_all off
go

|--select * from dbo.公交 where city='宣城'
|--Compute Scalar(DEFINE:([公交].[LineStop]=[公交].[LineStop]))
|--Table Scan(OBJECT:([CQ20].[dbo].[公交]), WHERE:([公交].[city]=Convert([@1])))

set statistics io on
go
select * from dbo.公交 where city='宣城'
go
set statistics io off
go

表 '公交'。扫描计数 1,逻辑读 256 次,物理读 0 次,预读 0 次。

set statistics time on
go
select * from dbo.公交 where city='宣城'
go
set statistics time off
go

SQL Server 执行时间:
CPU 时间 = 0 毫秒,耗费时间 = 3 毫秒。
/*-----------------创建city字段的索引-------------------*/
CREATE
INDEX [idx_city] ON [dbo].[公交] ([city])

/*------建立索引后的状况
Index Seek 索引扫描
逻辑读 9 次
执行时间 0 毫秒 -------*/
set showplan_all on
go
select * from dbo.公交 WITH(INDEX=idx_city) where city='宣城'
go
set showplan_all off
go

|--select * from dbo.公交 WITH(INDEX=idx_city) where city='宣城'
|--Compute Scalar(DEFINE:([公交].[LineStop]=[公交].[LineStop]))
|--Bookmark Lookup(BOOKMARK:([Bmk1000]), OBJECT:([CQ20].[dbo].[公交]))
|--Index Seek(OBJECT:([CQ20].[dbo].[公交].[idx_city]), SEEK:([公交].[city]='宣城') ORDERED FORWARD)

set statistics io on
go
select * from dbo.公交 WITH(INDEX=idx_city) where city='宣城'
go
set statistics io off
go

表 '公交'。扫描计数 1,逻辑读 9 次,物理读 0 次,预读 0 次。

SQL Server 执行时间:
CPU 时间 = 0 毫秒,耗费时间 = 0 毫秒。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: