昨天的讲座中,Stephen Walther也对存储过程和直接的SQL语句的运行作了比较,发现存储过程只比直接的SQL语句快5%左右,其解释是SQL SERVER 2000对重复请求的SQL语句的执行计划作了缓存。
其实使用存储过程并不是要单纯追求performance,而是它带来的包装和清晰的界面,以及保持系统部件间的loose coupling。也就是说各个部件间, 除了保持基本的界面外, 可以相对独立地改变。我们最近做的一个项目中使用了大量的存储过程,而不是把SQL语句直接写在数据访问层的编码里。开发期间数据库几经变动,但由於使用了存储过程,改动的数据访问层的编码很少。
在讲座后的提问中,有人问Stephen Walther,你在你的ASP.NET Community Start Kit里使用了这些快速的访问方法么?他笑了起来,他说,performance并不完全是一切,在设计中要考虑的因素很多,譬如maintainability, extensibility, scalability, security, productivity等等。
我非常同意这样的观点,在很多场合下performance is not everything。譬如,他提到用DataReader的ASP风格的表格显示比DataGrid绑定DataReader快60%(注,这里的“快”指的是,在服务器上执行页面的时间少) ,那你是不是准备用这样的方式在你的项目里来显示数据?
CSDN有个网友使用了类似ASP风格的方式(注:譬如在网页内加<%=… %>等),然后宣称他的网站极快(注,这里的“快”指的是响应时间,与上面所说的“快”有区别),我记得我当时的评论时,it is a waste to use ASP.NET,
你不见得要用DataGrid,因为DataGrid包袱很大,你可以写自己的控件,只提供你自己需要的功能。Stephen Walther做了个类似的控件,然后问听众是他的控件快还是DataGrid快,只有两个人举手说他的控件快,我是其中的一个,
后记:我上面的说法有点不妥,但我的意思应该是说,为了点小performance提高,在ASP.NET里还写象ASP那样的spaghetti编码,实在是浪费