优化--亮剑.Net--笔记
C#编码优化
1.Foreach比for语句具有更好的执行效率。
2.避免用ArrayList,多使用List<>。避免装箱拆箱工作。
3.不要使用UpperCase和Lowercase转换字符串进行比较,用String.Compare代替,它可以忽略大小写进行比较。
4.定义空字符串变量时避免使用String abc="",应使用String abc=String.empty。
5.用StringBuilder代替使用字符串连接符"+"。
6.避免在循环里面定义变量,应在循环外定义变量,如有需要再在循环内改变变量值。
页面优化
1.尽量减少HTTP请求次数,合并JS和CSS文件。
2.减少请求文件的大小,减少请法度数据占用的网络带宽,可在JS和CSS文件中删除无用的字符,如,空格,换 行,注释等。
3.删除页面中可有可无的内容,多余的空格和缩进占大部分,道理和上一点一致。
4.保持同一URL的大小写一致性,Internet Explorer的缓冲区也是区分大小写的,所以要保持URL字符串大小写一致,否则,浏览器会以为是服务器不同的文件,导致重新多下载一份。谨记:同一位置的URL,在不同页面中请保持URL字符串的大小写一致性。
5.遵循XHTML规范,对每个标记应该有始有终,虽然没有结束也可以正常,但这无疑让浏览器花费时间来判断和计算此标记应在哪结束。
6.勿将整个页面放在Table里面,因为Table需要把表格里面的所有东西加载后才会显示,正确做法应将内容分割到多个Table里面。
7.做友情连接时,把对方的LOGO复制到自己的服务器上,页面显示的是自己服务器上的图片,这样速度就由自己的网站决定,不受友情网站的影响。(当然,用文字不用LOGO是最快的:))
ASP.NET开发性能优化
1.假如页面只是用来做为显示的,请尽量使用HTML静态页面。
2.避免没有必要的页面回抛操作,在页面的LOAD事件里面,请注意多使用Page.IsPostBack,可以避免无用的操作。
3.尽量在客户端做好数据验证,以少次请求次数,当然服务器的C#代码还是需要重新验证的,客户端的验证是为了用户的体验度,服务器端的验证是为了数据安全。还有,在提示用户输入的数据有错时,请一次性给出所有错误,不要每次只告诉一个错误,比如用户姓名和年龄都没有填写,请一次性告知,无需让用户错了一次之后再告诉用户年龄没有填写。
4.尽可能多使用HTML控件,减少使用服务器控件,服务器控件还需要内部转换成HTML控件。在页面显示数据时,如果只是简单的显示,没有操作的话,请按以下优先级考虑使用的控件 Repeater->->DataList->->DataGrid(GridView), DataGrid和GridVIew开销太大,如果不是为了修改,删除,添加,分页这些功能,请尽量不要使用。
5.关闭没有必要的ViewState,使用ViewState,每个对象都必须先序列化到ViewState,回传时还要进么反序列化,因此ViewState的代价是非常大的,特别是DataGrid和GridView。先按自己的需求选择开启或者关闭。
6.禁用调试模式,如果程序开启了调试模式,性能会受到非常大的影响,因为程序在调试模式下做了非常多的工作。可在配合文件中System.Web下面设置
缓存
1.最简单的页面缓存,即在页面添加<%@ OutputCache Duration="60" VaryByParam="none" %>,Duration=60,表示缓存时间为60秒,VaryByParam=none表示不希望任务参数来改变缓存内容,VaryByParam="a",表示根据a参数的改变来改变缓存的内容,如果要求根据任何参数的改变都需要改变内容,即VaryByParam="*",VaryByParam也可以等于控件ID名,根据控件的值来判断是否需要使用缓存。
2.局部缓存(自定义控件缓存),同样,只需要在用户控件的ascx里面添加此代码即可:<%@ OutputCache Duration="60" VaryByParam="none" %> 意思和在页面添加的是一样的.前面讲的是对页面的某一部分进行缓存,接下来要讲的是相反的,除了页面中某一部分使用缓存之外,其它都不使用缓存,即只缓存一小部分,在页面添加此代码
public static string getCurrentTime(HttpContext context){
return DateTime.Now.ToString();
}
Substitution指定的方法必须符合以下3个条件,1.必须被定义为静态方法。2.必须接受HttpContext类型参数。3.必须返回String类型。
3.应用程序数据缓存,System.Web.Caching.Cache objCache = HttpRuntime.Cache; Cache类是一个字典,可以在其中存储任何内容,同时可以设置过期时间,可以达到很好的缓存效果。
4.数据库缓存依赖,根据数据库的数据改变而改变,数据库如果不改变则一直使用缓存数据。(PS:由于步骤太多,没有细说,可以baidu,google上找找)。
SQL命令优化
1.字段提取越少越好,尽量避免使用"select *"。
2.多表查询时,使用某字段时,尽量使用表别名.字段名,这样可以明确告知这个字段是对应哪张表,不需要系统再去分析这个对段是在哪张表里面的。
3.尽量使用exists代码In,Not Exists代替Not In。
4.尽量不使用or关键字,这样会引起扫描全表,大大降低了查询的效率。
5.注意where子句的写法,必须考虑语句顺序,应该根据索引顺序,范围大小来确定条件子句的前后顺序,尽可能地让字段顺序与索引顺序一致,范围从大到小。
6.注意表之间连接的数据类型,避免不同类型数据之间的连接。
7.在编写SQL查询之前了解表的索引,有效利用索引能够避免不必要的全表扫描,应避免在where子句中使用
IS NULL , <> , != , !>,!<,NOT,NOT EXISTS,NOT IN, NOT LIKE等命令,它们会引起全表扫描,导致索引无效。
8.请不要在查询中使用排序功能(ORDER BY),这样会降低查询的性能,可以将查询结果读至本地数据集中进行排序操作,那样通常会更快。
9.尽量避免使用游标,如果使用游标,尽量避免在游标中使用连表查询。
10.为您的表添加适当的索引,有时可以提高几十倍到几百倍的速度。
夜深,休息,再续....