My Blog is my notepad, I want to mark my work anytime, also i can share my harvest with everyone....

Teracy 's space--->

I love BS Develop ,So i am busying as a bee.Do more,Know more,you will get more.....

博客园 首页 新随笔 联系 订阅 管理

针对ASP.NET的性能优化我也来提提我的看法把。还没有十点哦~~

对于不同的项目其侧重点肯定不同,考虑的外界因素也是不同的。
下面我的经验来谈谈怎么来优化我们的ASP.NET产品

        我个人认为BS的产品做出来很多时候是网友看的,这个时候我们要考虑到网友的环境问题,
想的最差的他们的机器性能很差,运行很慢的时候我们怎么样让我们的网站能否快速的现在在
他们的屏幕上面呢;

        第一点,我们在我们的项目上面设置缓存,不是页面级别的,
页面级别的缓存我觉得是给那些懒惰的开发人员用的,我们要设置到层这一级,这样我们只要一个
层出来这个层就显示在我们网友面前了,而不会让整个页面全部加载后才显示这个页面,
这样的效率是不可取的,应该现在我们讨论的性能实际上也是客户体验的另外一个说法而已,
所以客户的体验要从各个方面去着手,我想这也是一个方面。

        第二点,我们现在的网站大部分都是用的WEB 2.0的模式,所以这个大部分数据的交互,
但是一个基本的就是我们要显示出来的数据是不是可以不用对它们来进行大量的处理的话我
们是强烈建议使用SqlDataRead而反对Dataset,前者是直接从数据库里面以只进只读的方式读
取数据显示出来,后者是放内存中,想想要是有大量的数据的话都放内存中,网友的内存放
得下吗?但是这个又还要考虑一个问题我们在做OA,CRM之类的产品的时候就不能这样想
了,因为这里可能有比较多的数据操作,例如添加,修改,删除都是会常常做的,所以这个
光看这个是不行的,要符合实际。

        第三点还是数据库方面的,在我们来操作数据的时候若要返回的是受到这次操作影响的行
数的话我建议使用ExecuteNonQuery,这个对于数据的添加,修改,删除比较实用,而对于数
据的查询我们是建议使用ExecuteScalar,这个知识点我相信一般的ADO.NET里面都会谈到的。

        第四点就是我们的SQL语句到底是不是该用存储过程,
这个问题我也想过一段时间,不解的是有的公司严格控制存储过程和视图的数量,好象这个就
是一个负担一样的,听一个朋友讲他们用的全部都是SQL语句,极少有两个存储过程,这样我
不是很理解项目经理的想法,是考虑到数据库的压力还是考虑这个网站的性能,为什么宁愿把
SQL语句拿在代码的某个业务层里面来拼都不写到存储过程里面呢,大家都知道:
存储过程存储在本地服务器上,减少了执行该过程所需的网络传输宽带和执行时间。
(存储过程已经对sql语句进行了预编译,所以其执行速度比在程序里执行sql语句快很多),并且
传递参数和执行逻辑表达式的功能,有助于应用程序设计者处理复杂任务,存储过程有怎么多好处,
为什么我们不全部都用存储过程呢,当然啦,也要考虑一个很现实的问题结合实际情况吧。对于
一个业务复杂的SQL语句我是强烈建议使用存储过程的。强烈建议也只是建议哦,项目经理不是我;

         第五点:回到我们的页面上来:我们都知道页面里有个EnableViewState(页面的视图状态)。
如果无特殊要求设置为false。使用ViewState ,每个对象都必须先序列化到 ViewState 中,
,因此使用 ViewState是没有代价的。尽量减少使用对象,如果可能,尽量减少放入
 ViewState 中的对象的数目。下面情况基本上可以禁用viewstate:1,自定义用户控件(.ascx)
2,控件没有动态的或数据绑定的属性值(或对于每个postpack都在代码中处理);3,无需对控
件的事件处理。4,页面不回传给自身。
   
    单个页面或每个页面都禁用 ViewState,如下所示:单个页面:<%@ Page EnableViewState="False" %>
每个页面:在 web.config 中 <Pages EnableViewState="false" /> EnableSessionState保持默认值即可
(如果页面用到sessionstate它才会占用资源)。EnableViewStateMac如果无安全上的特殊要求,保持默认值。
其实这也实际上相当与一个隐藏的控件,它会额外产生很多的代码,所以我们没有必要用它的时候就将它设置为False,
这个属性的最低级别也是可以控制到某个控件的,所以我们有的地方要用有的地方不用就可以将不用的那个控件设置为False,
也是可以的。

       第六点:页面布局模型。建议使用Flow(元素不带绝对定位属性添加).Grid(绝对定位属性)
由于采用绝对定位,将会比Flow生产更多的代码,主要是控件的定位信息。
第七点:项目发布的时候切记解除页面的Debug状态。
第八点:Html语言的优化。我的建议是熟练掌握Html/javascript,少用VS自动生产的代码,它会自动生成一些无用的html代码。

        第九点:Html控件和服务器控件的选择。服务器控件带来的方便和功能上的实现是html控件所不能比拟的。但是是以牺牲服务器端的资源来取得的。
我个人建议:如果html控件达不到所要实现的功能,而且和一些脚本语言(如javascrpt/vbscript)结合也不能实现的话。才会选择服务器控件。
选择服务器控件后,也尽量对其控件优化,如取消一些页面状态等(具体看控件的优化)
    服务器控件的选择:主要针对几个常用数据控件说明一下:
    GridView:自带最强大的数据显示控件,内置了对数据的修改、删除、添加、分页等很多实用功能。如果你只需对数据显示的话,尽量不要选择GridView(它把数据都存储在viewstate中).也不要使用自带的分页功能,microsoft在自动分页的底层做了很多工作,虽然使用方便了,但性能开销大了。这个东西只适合于初学者做做玩,呵呵;
    DataList:比GridView功能少了很多。但自定义性强了很多。特有的多行数据显示,给我们带来了很多方便。GridView能实现的功能,它基本能实现。所以建议使用它。
    Repeater:功能最少,但自定义性非常强。如果只需对数据显示,建议使用。由于减少了很多功能,对服务器的性能带来消耗最小。因此,如果是对数据显示的话,我基本上都是选择Repeater然后DataList最后GridView
    尽量选择html控件。能在客户端实现的功能就在客户端实现(熟练掌握javascript),减少服务器的压力。数据控件选择顺序:Repeater、DataList、GridView
要想对这个ASP.NET的性能优化有深入的理解的话我还得好好学习学习,我就这些谬论来供大家参考参考。

posted on 2007-05-05 16:55  Teracy  阅读(103)  评论(0编辑  收藏  举报
One Two Three 向“前”走............
frontpage tracking
Sony Style Coupons