none
PagedDataSource类是怎样实现分页的?和存储过程实现分成性能如何? RRS feed

  • 问题

  •  

       我想一些控件的分页功能(如:GridView),就是用的这个类来完成的吧?

       我在网上和不少地方看到有人用很麻烦的方法实现的分页,如用存储过程,用存储过程的方法我理解的是:根据需要(如:用TOP n WHERE 语句加以限制,只从众多数据中查出当前页面需要的几条数据)

      而我在用PagedDataSource时为此实例的数据源(DataSource)写Sql语句时,甚至简单到:SELECT * FROM [table] 那它也会根据PageSize属性,只读取当前页面需要的数据么?它好像不能实现查寻。

     

    两种方法,一种麻烦点一种相对简单那,熟优熟劣呢?

     

    另外, 

    我经常遇到一些看起来比较麻烦的写法,而往往又听说较麻烦的写法性能比较好!!却知其然不知其所以然,

    比如:

    简单的:

    if(username == "mxh")

    {}

    麻烦的:

    if (username.EndsWith("mxh", StringComparison.InvariantCultureIgnoreCase)

    {}

     简单的:string strName = "";

     麻烦的 string strName = string.Empty;

    简单的 <%#Eval("userName")%>       

     麻烦的:<%#DataBinder.Eval(Container.DataItem, "userName")%>   

      ................ 



    www.haodd123.com 我是半路出家,而且是自学 学的是C#语言,希望回帖的高手们留意一下,谢谢大家的帮助
    2009年2月20日 8:56

答案

  •  无论怎样,在不考虑缓存技术的前提下,相同的sql语句直接在数据库里面执行查询是最快的,在大数据量时,存储过程比较好,PagedDataSource控件应当是将数据全部取出来再进行分页计算(比如跳过DataSet里面的表的前2页的数据,然后显示第三页的数据)的。控件本身不会在数据库里添加任何东西。所以,不如直接在数据库中执行存储过程快。

    关于另外里面的话题:
    "'与Empty是相同的,
    username == "mxh"与 username.Equals("mxh"),一般是等价的,但是 Equals用途更广,比如是否按大小写比较,直接使用==就不行。
    在java里面,不同使用==号判断对象是否相等,因为Java里面String是对象,需要使用Equals比较,也就是值类型与引用类型的问题。

    <%#DataBinder.Eval(Container.DataItem, "userName")%> 是asp.net2.0之前的写法,

    <%#Eval("userName")%>    asp.net2.0之后的写法,进行了简化,写起来方便。功能相同
     

    如果在实际工作中遇到与自己想法不同的结果,这个时候就要分析你使用的方法是否合理了。

    孟宪会
    • 已标记为答案 lkf18 2009年2月20日 13:34
    2009年2月20日 13:12
    版主