用户操作
[即时聊天] [发私信] [加为好友]
王百康ID:baikangwang
31923次访问,排名3873,好友0人,关注者11人。
年轻热情,充满活力;性格开朗,心理素质好;专业知识扎实,有两年工作经验;参与多个项目开发与维护,有一定工作经验;追求创新,热爱学习;热爱工作,团结同事;团队意识强,有大局观.
baikangwang的文章
原创 77 篇
翻译 0 篇
转载 39 篇
评论 19 篇
最近评论
ibsrvk:wow power leveling
xx:xx
asdasd:sdfsdf
asdasd:# ss 发表于2008-01-03 22:54:11 IP: 58.51.8.*
aa



# bigcat1270 发表于2008-03-29 23:44:57 IP: 60.209.200.*
谢谢,非常有用!



# asdasd 发表于2008-04-10 21:0……
asdasd:sadasdasd
文章分类
收藏
    相册
    ASP.NET2.0著名教程
    Scott Mitchell的ASP.NET2.0数据指南中文版索引(RSS)
    工具
    爱词霸
    好好学习天天向上
    Ajax 资源中心
    Clingingboy(控件研究)
    Working in Data with ASP.NET 2.0(RSS)
    数据结构
    漠漠星
    疯子乱语
    膜拜牛人
    Scott Mitchell 的ASP.NET 2.0数据教程(50之后可以在下面的地址)
    scott Mitchell:SCOTT On Writing(RSS)
    ScotteGu's Blog(RSS)
    ScotteGu's Blog(中文版)(RSS)
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 数据库性能提升之减少访问数据库次数收藏

    新一篇: 异常类型 | 旧一篇: ASP.NET 实现分页

    前面两个方法我们通过调用ProductsBLL类的GetProductsByCategoryID(categoryID)方法来获取当前 category的product(第一种通过ObjectDataSource,第二种通过GetProductsInCategory (categoryID)).每次方法被调用时,BLL调用DAL,DAL通过SQL查询数据库,返回特定的记录.


    如果有N个category,这个方法会访问数据库N+1次— 一次返回所有的category,N次返回特定category下的product.然而我们可以通过访问数据库两次来获取所有需要的数据— 一次返回所有的category,一次返回所有的product.一旦我们得到所有的product,我们可以根据CategoryID来过滤,然后再绑 定.

    我们只需要稍微修改ASP.NET页的code-behind里的GetProductsInCategory(categoryID)方法来实现这个功能.我们首先来返回所有的product,然后根据传入的CategoryID里过滤.

     

                private Northwind.ProductsDataTable allProducts = null;
                
    protected Northwind.ProductsDataTable GetProductsInCategory(int categoryID)
                
    {
                
    // First, see if we've yet to have accessed all of the product information
                if (allProducts == null)
                
    {
                ProductsBLL productAPI 
    = new ProductsBLL();
                allProducts 
    = productAPI.GetProducts();
                }

                
    // Return the filtered view
                allProducts.DefaultView.RowFilter = "CategoryID = " + categoryID;
                
    return allProducts;
                }


    注意allProducts变量.它在第一次调用GetProductsInCategory(categoryID)时返回所有 product信息.确定allProducts对象被创建后,在根据CategoryID来对DataTable过滤.这个方法将访问数据库的次数从N +1减少到2次.
    这个改进没有修改页面的声明语言.仅仅只是减少了数据库的访问次数.

    注意:可能想当然的觉得减少了数据库访问次数会提高性能.但是这个不一定.如果你有大量的categoryID为NULL的product,这样使 用GetProducts方法返回的product有一部分不会被显示.而且如果你只需要显示一部分category的proudct(分页时就是这 样),而返回所有的product,这样对资源也是一种浪费.

    通常对两种技术进行性能分析,唯一正确的方法是设置程序常见的场景来进行压力测试.

     

    发表于 @ 2007年04月25日 02:21:00|评论(loading...)|编辑

    新一篇: 异常类型 | 旧一篇: ASP.NET 实现分页

    评论

    #yadier 发表于2007-04-25 20:32:57  IP: 219.236.47.*
    这什么啊 没看明白
    #brucewangzhihua 发表于2007-04-26 09:36:17  IP: 219.133.40.*
    不完整啊
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © baikangwang