网站性能优化解决方案

 
一、性能参数:
1、 吞吐量
2、 响应时间
3、 执行时间
4、 可伸缩性
 
二、性能优化方案:
编号
方案
说明
状态
1
在部署应用程序时,应该关闭Debug模式,这将有效提高应用程序性能(web.config文件的debug=false)
 
 
2
在部署应用程序时,使用RELEASE模式进行编译发布,优化程序资源!
 
 
3
尽量避免使用throw Exception,减少额外的开销
 
提供用户一个友好的出错页面
protected void Application_Error(Object sender, EventArgs e)
{
     …… .
              Application["error"] = error;
              Response.Redirect("MyErrorPage.aspx");
}
由于捕获的异常,所以性能提升不大,但提供了统一的友好的出错信息页面
4
对适当的动态页面进行页面级缓存<%@ 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中:
public override string GetVaryByCustomString(HttpContext context, string arg)
{
     if (arg == "ceshi")
     {
         string s_cs=Request.Url.ToString();
         return Request.Url.ToString() ;
     }
     return base.GetVaryByCustomString( context, arg);
}
5
尽量使用存储过程完成数据操作
 
 
6
对于只读的数据访问 , 使用 DateReader代替DataSet
 
 
7
关闭不必要的 ViewState
使用 ViewState 时,每个对象都必须先序列化到 ViewState 中,然后再通过回传进行反序列化,因此使用 ViewState 并非是没有代价的。<input type="hidden"
没有进行加密,ViewState 只是进行了 Base64 编码
每个控件(在标记上) <asp:datagrid EnableViewState="false" ?/>
每个页面(在指令中) <%@ Page EnableViewState="False" ?%>
每个应用程序(在 web.config 中) <Pages EnableViewState="false" ?/>
 
 
8
调整数据库 SQL语句
前提:需要在完全理解业务逻辑的情况下
 
9
调整索引
 
 
 
 
 
 
 
 
 
 
 
小测试,说明索引的重要性,虽然执行时间只是从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 毫秒。
 

你可能感兴趣的:(sql,server,object,application,性能优化,Go,statistics)