查看: 1142|回复: 9
|
ASP.NET performance 问题
[复制链接]
|
|
请问,在developement 已经达到80 %的前提下,要怎么样避免重做,而达到把web application performance加快?
如果说,你的系统大部分使用dynamic SQL 来处理你的query...然而,在实际Go live情况下,系统必须一天至少处理150000 的record...我找了一些资料,都说以dynamic sql来handle这样的需求会严重拖慢performance...然而,既然已经做了80%,除了把query 都换成store proc, 还有别的方法吗? |
|
|
|
|
|
|
|
发表于 22-6-2006 09:32 AM
|
显示全部楼层
除了 stored procedure, 你可以尽量减少 session 的使用, 可以的话转换去 ViewState, 也尽量用 IsPostBack 来减少重载 form 的资料, 或尽量避免让 DataView 储存太多的资料后做 re-select, 因为 DataView 只是一个 buffer. |
|
|
|
|
|
|
|
发表于 23-6-2006 02:10 AM
|
显示全部楼层
我假设把你的 cache 当成是 ViewState, 那么你只有一个选择: DataTable, 因为 DataView 是没办法储存到 ViewState 的.
另外 DataView 可以包含多个 DataTable, 是用来过滤 DataTable 的资料的工具. 所以表面上看来... DataView 会比较消耗资源. |
|
|
|
|
|
|
|

楼主 |
发表于 26-6-2006 06:19 PM
|
显示全部楼层
原帖由 goatstudio 于 22-6-2006 09:32 AM 发表
除了 stored procedure, 你可以尽量减少 session 的使用, 可以的话转换去 ViewState, 也尽量用 IsPostBack 来减少重载 form 的资料, 或尽量避免让 DataView 储存太多的资料后做 re-select, 因为 DataView 只是一个 ...
现在主要问题出现在datagrid...
每一次换页数,无法避免postback,将重新bind 150000++的record...
我们没有用DataView ....
我现在在想,能不能够用viewstate储存150000record 的datatable...除了第一次load,每一次换页数,去viewstate 的datatable拿回record.....
我找了不少资料,似乎都说stored proc处理这样大的资料库是最理想的选择。。。然而,时间紧迫,是不太可能改得了。。。还有什么办法在ASP.NET 可以有效率的处理这样大的资料? |
|
|
|
|
|
|
|

楼主 |
发表于 26-6-2006 06:48 PM
|
显示全部楼层
暂时,我用custom paging减少拿到的record...然而,这个办法让我的sorting做不到了。。。
网上找的都是用stored proc做custom paging & sorting...而我不要用stored proc...
有任何dynamic sql custom paging & sorting 的资料吗? |
|
|
|
|
|
|
|
发表于 26-6-2006 11:29 PM
|
显示全部楼层
原帖由 雨吟 于 26-6-2006 06:19 PM 发表
现在主要问题出现在datagrid...
每一次换页数,无法避免postback,将重新bind 150000++的record...
我们没有用DataView ....
我现在在想,能不能够用viewstate储存150000record 的datatable...除了第 ...
你不能一次过读取那么多的资料, 那会导致速度会拖慢, 即使用了 viewstate 也一样.
这要看你的 code 要如何改,你可以预设一些 criteria 在里面, 否则, 真的只有在 store proc 里面改. |
|
|
|
|
|
|
|
发表于 26-6-2006 11:31 PM
|
显示全部楼层
原帖由 雨吟 于 26-6-2006 06:48 PM 发表
暂时,我用custom paging减少拿到的record...然而,这个办法让我的sorting做不到了。。。
网上找的都是用stored proc做custom paging & sorting...而我不要用stored proc...
有任何dynamic sql custom ...
DataGrid 有个很伤脑筋的设计... 那就是 page + sorting 永远是最难搞的...
建议你不要用 DataGrid 的 sorting, 自行写一个. 你可以用 querystring 的方法来办到. |
|
|
|
|
|
|
|

楼主 |
发表于 27-6-2006 02:45 PM
|
显示全部楼层
之前的瓶颈,在于我们一直想办法解决处理上万record的问题。。。于是,就一直把解决要素锁定在"上万"这个issue...
现在,想了个折衷的办法,把我们的query全部改成一次只选择最多一个数目的record... eg. 每次只显示1000 record。。。
没有上万,就没有问题了。。。。可以用default paging & sorting。。。
个人觉得,这样子好像解决了,又好像没有解决问题。。。
只是作为充实知识的前提,我想请问各位,通常怎么样处理这样大的系统?
很多资料,对database performance在 dynamic SQL, store proc etc的处理下的成效比较,谁比较快?谁比较好?都解释的模林两可。。。经验谈来说,你们觉得哪一个比较适合处理大的系统和要求?? |
|
|
|
|
|
|
|
发表于 27-6-2006 04:36 PM
|
显示全部楼层
如果你用MYSQL,那我建议用LIMIT来分也。
如果你一次过把DATABASE里的所有资料显示出来就很吃力了。。尤其是你进行SEARCHING的时候。而且IIS那里也有TIMEOUT的DURATION。 |
|
|
|
|
|
|
|
发表于 30-6-2006 10:57 PM
|
显示全部楼层
原帖由 雨吟 于 27-6-2006 02:45 PM 发表
之前的瓶颈,在于我们一直想办法解决处理上万record的问题。。。于是,就一直把解决要素锁定在"上万"这个issue...
现在,想了个折衷的办法,把我们的query全部改成一次只选择最多一个数目的record.. ...
Stored Procedure 会比较快, 也能处理一些特殊的情况, 例如说你需要用到资料库里的指标在一堆资料中找出特定的资料.
把 query 显示数目算是一个方法, 虽然是折衷的方法, 别忘了除了 sql server, 限制你们的还有 bandwidth, 如果你有用 online banking, 银行通常会限制你索取资料的数目.
我的方法是, 可以的话, 尽量用 Stored Procedure/View, 可以避免在 run time 的时候把长长的 sql 传上资料库. 另外, 尽量好好运用 .Net 里的 DataView/DataTable, 这两个方法如果运用得当, 可以减少你访问资料库的数量. |
|
|
|
|
|
|
| |
本周最热论坛帖子
|