从编码方面提高网站性能的手段
一、 缓存
缓存是ASP.NET中提高性能的重要手段,缓存一般遵循以下原则:
1) 在页面中将静态内容与动态内容分割开来
考虑将动态内容作成用户控件
2) 缓存合理的数据
一般应当缓存应用程序集的数据、多个用户共同使用的数据、静态数据、生成数据需要很大开销的动态数据、DataSet以及自定义对象等。不要缓存数据库连接对象、DataReader。
3) 选择适当的方式
如可以使用页面缓存指令,API等。
二、 视图状态
视图状态放在页面中名为_VIEWSTATE的表单隐藏域里面,随页面一起被发送到客户端,在用户提交页面时,又被提交到服务器。
1) 如果不需要视图状态,则禁用
视图状态默认是允许的,如果页面不进行PostBack,如果不处理服务器控件的事件,如果服务器控件的数据每次都需要重新计算等
2) 尽量减少视图状态中存放的对象
三、 关于页面处理(减少页面生成的时间和过程)
1) 应尽量减少页面文件的大小
2) 通过检测Page.IsPostBack减少代码执行的数量
3) 禁止使用Debug=“true”,减少页面生成过程中生成额外的调试信息
4) 使用Server.Transfer而不使用Response.Redirect,减少服务器和客户端间的往返
5) 尽量使用客户端验证,减少服务器和客户端间的往返
6) 在适当的场合使用服务器控件
7) 尽量避免嵌套的服务器控件
四、 避免使用Page.DataBind和DataBinder.Eval
五、 关于Application对象和Session对象
1) 使用静态属性存储数据而不使用Application对象,在Application对象里存储只读类型的数据都将回提高性能
2) 尽量使用InProc模式的Session,这个模式是最快的
3) 在Session里存储基本类型的数据减少序列化的所消耗的资源
4) 如果不用Session变量,使用EnvableViewState=“false”禁用
5) 如果不修改Session变量的值,尽量使用ReadOnly属性设置
六、 关于字符串操作
1) 尽量使用Response.Write将结果输出到浏览器,这种方法是最快的。不要将字符串连接在一起一次输出。
2) 在字符串短并且少的情况下可以使用String.Concat方法,而在字符串长度未知,并且字符串大的情况下,使用StringBuilder对象
3) 不要使用strVar==“”来判断字符串是否为“”,这样它会创建额外的字符串,请使用strVar==String.Empty代替或者使用strVar.Length==0来判断
4) 请使用String.Compare方法进行字符串的比较
七、 关于数据访问
1) 尽量使用存储过程返回数据,不要直接在代码中进行查询
2) 在数据库中只返回有用的数据结果,不要选择不使用的数据字段
3) 进行使用DataReader进行数据绑定,DataReader是单向只读的
4) 尽量一次返回多个数据集而不是每个记录集分别打开一次数据库连接进行查询
5) 尽量晚的打开数据库,尽量早的关闭数据库
6) 使用连接池提高性能
7) 使用ExecuteNonQuery方法执行不返回数据的操作,使用ExecuteScalar方法返回单个结果的操作,使用CommandBehavior.Sequentialaccess返回二进制数据或者大数据
8) 如果多次相同的查询,请使用Command.Prepare方法
9) 使用GetOrdinal方法预先得到索引值,使用索引值比使用字符串的列名查询数据效率更高
八、 关于代码优化
1) 在解析基本数据类型时,使用Try方法如果解析失败,会抛出异常,使用TryParse方法则只执行Else下的语句。
2) 使用AppendAllText、WriteAllBytes等方法读写文件内容可以优化性能
3) 将循环判定条件放在for语句外
4) 避免在循环里创建对象
5) 尽量减少装箱的次数
6) 不要使用例外控制程序的流程
7) 在循环中不要使用不变的对象属性或者字段
8) 使用for循环代替foreach循环遍历结合内容
9) 数组是所有集合中最快的,如果没有特殊需要,尽量使用数组代替集合
10) 了解各个集合类型的特性,选择合适的类型
11) 使用泛型避免减少装箱、拆箱