发布时间: 2010-03-10 10:27 阅读: 1168 次 推荐: 0 原文连接 [收藏] html
最近在领导的要求下作了一下项目的优化,总结以下:web
1. 使用存储过程(若是在程序里用exec 存储过程参数,这样执行彷佛并无快多少)。sql
在数据库里是预编译的,也不须要在字符串传输上花费大量时间。 防sql注入攻击。数据库
2. 尽可能优化数据库语句,使逻辑尽可能简单缓存
a) 还有就是在使用函数时,charindex >like > padindex 效率依次递减。安全
b) 查询字段是否包含在以,分隔的字段串时,最好不要用in 速度很是慢。性能优化
还有好多,能够总结的,这里就再也不描述了。服务器
3. EnableViewState(页面的视图状态)。若是无特殊要求设置为false。session
使用ViewState,每一个对象都必须先序列化到ViewState中,而后再经过回传进行反序列化,所以使用ViewState是有代价的。尽可能减小使用对象,若是可能,尽可能减小放入ViewState中的对象的数目。下面状况基本上能够禁用ViewState:框架
(1) 页面控件 (.ascx)。
(2) 页面不回传给自身。
(3) 无需对控件的事件处理。
(4) 控件没有动态的或数据绑定的属性值(或对于每一个postpack都在代码中处理)。
单个页面或每一个页面都禁用 ViewState,以下所示:
单个页面:<%@ Page EnableViewState="False" %>
每一个页面:在 web.config 中 <Pages EnableViewState="false" />
EnableSessionState保持默认值便可(若是页面用到sessionstate它才会占用资源)。
EnableViewStateMac若是无安全上的特殊要求,保持默认值。
4. Pagelayout页面布局模型
建议使用Flowlayout(元素不带绝对定位属性添加)。Gridlayout(绝对定位属性)因为采用绝对定位,将会比Flowlayout生产更多的代码,主要是控件的定位信息。radiobuttonlist和checkboxlist等
5. 项目发布的时候切记解除页面的Debug状态
6. 尽可能选择html控件
能在客户端实现的功能就在客户端实现(熟练掌握JavaScript),减小服务器的压力。数据控件选择顺序:Repeater、DataList、DataGrid。
7. 在创建数据库链接后只有在真正须要操做时才打开链接,使用完毕后立刻关闭,从而尽可能减小数据库链接打开的时间,避免出现超出链接限制的状况。
8. 字符串操做性能优化
(1) 使用值类型的ToString方法。
在链接字符串时,常用"+"号直接将数字添加到字符串中。这种方法虽然简单,也能够获得正确结果,可是因为涉及到不一样的数据类型,数字须要经过装箱操做 ,转化为引用类型才能够添加到字符串中。可是装箱操做对性能影响较大,由于在进行这类处理时,将在托管堆中分配一个新的对象,原有的值复制到新建立的对象中。使用值类型的ToString方法能够避免装箱操做,从而提升应用程序性能。
(2) 运用StringBuilder类
String类对象是不可改变的,对于String对象的从新赋值在本质上是从新建立了一个String对象并将新值赋予该对象,其方法ToString对性能的提升并不是很显著。在处理字符串时,最好使用StringBuilder类,其.NET 命名空间是System.Text。该类并不是建立新的对象,而是经过Append,Remove,Insert等方法直接对字符串进行操做,经过 ToString方法返回操做结果。
9. 只要可能就缓存数据或页输出
ASP.NET 提供了一些简单的机制,它们会在不须要为每一个页请求动态计算页输出或数据时缓存这些页输出或数据。另外,经过设计要进行缓存的页和数据请求(特别是在站点中预期将有较大通信量的区域),能够优化这些页的性能。与.NET Framework的任何Web窗体功能相比,适当地使用缓存能够更好的提升站点的性能,有时这种提升是超数量级的。使用ASP.NET缓存机制有两点须要注意。首先,不要缓存太多项。缓存每一个项均有开销,特别是在内存使用方面。不要缓存容易从新计算和不多使用的项。其次,给缓存的项分配的有效期不要过短。很快到期的项会致使缓存中没必要要的周转,而且常常致使更多的代码清除和垃圾回收工做。若关心此问题,请监视与ASP.NET Applications 性能对象关联的Cache Total Turnover Rate性能计数器。高周转率可能说明存在问题,特别是当项在到期前被移除时。这也称做内存压力。
10. 使用 HttpServerUtility.Transfer 方法在同一应用程序的页面间重定向
采用 Server.Transfer 语法,在页面中使用该方法可避免没必要要的客户端重定向。但要根据状况区分Response.Redirect .Response.Execute的使用方法,区别对待。
11 .适当地使用公共语言运行库的垃圾回收器和自动内存管理
当心不要给每一个请求分配过多内存,由于这样垃圾回收器将必须更频繁地进行更多的工做。另外,不要让没必要要的指针指向对象,由于它们将使对象保持活动状态,而且应尽可能避免含Finalize方法的对象,由于它们在后面会致使更多的工做。特别是在 Finalize 调用中永远不要释放资源,由于资源在被垃圾回收器回收以前可能一直消耗着内存。最后这个问题常常会对Web服务器环境的性能形成毁灭性的打击,由于在等待 Finalize 运行时,很容易耗尽某个特定的资源。
12. 不要依赖代码中的异常
由于异常大大地下降性能,因此您不该该将它们用做控制正常程序流程的方式。若是有可能检测到代码中可能致使异常的状态,请执行这种操做。不要在处理该状态以前捕获异常自己。常见的方案包括:检查null,分配给将分析为数字值的String 一个值,或在应用数学运算前检查特定值。
13. 使用HttpResponse.Write方法进行字符串串联
该方法提供很是有效的缓冲和链接服务。可是,若是您正在执行普遍的链接,请使用多个Response.Write 调用。下面示例中显示的技术比用对Response.Write 方法的单个调用链接字符串更快。
Response.Write("atest");
Response.Write(strString);
Response.Write("boxbig");
14. 除非有特殊的缘由要关闭缓冲,不然使其保持打开。
禁用 Web 窗体页的缓冲会致使大量的性能开销。
15. 避免到服务器的没必要要的往返过程
使用Page.IsPostBack避免对往返过程执行没必要要的处理。
虽然您极可能但愿尽可能多地使用Web窗体页框架的那些节省时间和代码的功能,但在某些状况下却不宜使用 ASP.NET 服务器控件和回发事件处理。一般,只有在检索或存储数据时,您才须要启动到服务器的往返过程。多数数据操做可在这些往返过程间的客户端上进行。
16. ASP.NET应用程序性能测试
在对ASP.NET应用程序进行性能测试以前,应确保应用程序没有错误,并且功能正确。具体的性能测试能够采用如下工具进行:Web Application Strees Tool (WAS)是Microsoft发布的一个免费测试工具。它能够模拟成百上千个用户同时对Web应用程序进行访问请求,在服务器上造成流量负载,从而达到测试的目的,能够生成平均TTFB、平均TTLB等性能汇总报告。 Application Center Test (ACT) 是一个测试工具,附带于Visual Studio.NET的企业版中,是Microsoft正式支持的Web应用程序测试工具。它可以直观地生成图表结果,功能比WAS多,但不具有多个客户机同时测试的能力。服务器操做系统"管理工具"中的"性能"计数器,能够对服务器进行监测以了解应用程序性能。微软仍是出了IIS日志查看工具 LogParserLizardSetup.msi,LogParser.msi 二者配合使用。可查看每个页面加载调用执行的时间。
17. 压缩js
js在页面中调用的大小写要保持一致,省得缓存了不一样的文件,页面的js能够的话,写成单位的文件进行调用 。图片少用jpeg,使用gzip对网页进行压缩. 加快页面展现速度。
18. 把调用js,尽可能写在页面底部, 还有viewstate 状态也能够重写到页面低部, 也能够把viewstate进行压缩。条件是viewstate必要要用的状况之下。