none
为什么用泛型方法读取数据列表 比用 dataset方法 性能差那么多... RRS feed

  • 问题

  • using System;
    
    using System.Collections.Generic;
    
    using System.Linq;
    
    using System.Text;
    
    using System.Threading;
    
    using Xcw.Model.Content;
    
    using Xcw.Bll.Content;
    
    using Xcw.Web.UI;
    
    using Xcw.Common;
    
    using Xcw.Enum;
    
    using Xcw.SqlDal;
    
    using System.Data;
    
    namespace XcwCms.Test
    
    {
    
     public class Program
     {
    
    
      static void Main(string[] args)
      {
    
       CodeTimer.Time("泛型方法", 100, delegate() { TestIlist(); });
    
       CodeTimer.Time("DataSet方法", 100, delegate() { TestDataSet(); });
       Console.ReadLine();
      }
    
    
      //泛型方法
      public static void TestIlist()
      {
       string bb;
       IList<ColumnsInfo> listItem = Columns.GetColumnsList(ColumnsType.None);
    
       for (int i = 0; i < listItem.Count; i++)
       {
        bb = listItem[i].ColumnName.ToString();
       }
      }
    
     //DataSet方法
      public static void TestDataSet()
     {
       string aa;
       DataSet ds = Columns.GetList("", "OrderID");
       for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
       {
        aa = ds.Tables[0].Rows[i]["ColumnName"].ToString();
       }
      }
     }
    }
    
    
    
    
    泛型方法:
    Time Elapsed: 617ms
    Time Elapsed:<one time>:6ms
    CPU time : 234,375,000ns
    CPU time<one time>: 2,343,750ns
    Gen 0: 2
    Gen 1: 1
    Gen 2: 0
    DataSet方法
    Time Elapsed: 65ms
    Time Elapsed:<one time>:0ms
    CPU time : 31,250,000ns
    CPU time<one time>: 312,500ns
    Gen 0: 0
    Gen 1: 0
    Gen 2: 0
    <strong> 总是听人说 能用泛型就用泛型,测了一下没想到性能差那么</strong>
    
    
     大家帮我解释解释,为什么要用泛型...
    
    
    
    
     
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    2010年7月27日 9:40

答案

  • 一般IList 的实现都是用的 List<> 和Array      没有人自己写的。。。


    成为 Microsoft V Dash了。。。 欢迎各位前辈同事在OCS加我

     

         为什么没有人自己写?


    因为IList提供的接口主要是指一个数组集合的行为:按照index访问和维护内容。

    这个接口很大程度上是为了保持  Array和List<> 兼容性上 在.net2.0提出来的。

    自己写扩展实现 当然不能违背IList 的初衷,而从初衷的角度来说 List<>在大多数情况下已经足够用了。


    成为 Microsoft V Dash了。。。 欢迎各位前辈同事在OCS加我
    • 已标记为答案 xiawei_hi 2010年7月29日 5:10
    2010年7月28日 5:13
    版主

全部回复

  • ????/
    2010年7月27日 9:53
  • 你不能把

      IList<ColumnsInfo> listItem = Columns.GetColumnsList(ColumnsType.None);

       DataSet ds = Columns.GetList("", "OrderID");

    也放进性能测试啊 

     

    这个实现不好差很多的


    成为 Microsoft V Dash了。。。 欢迎各位前辈同事在OCS加我
    2010年7月27日 11:09
    版主
  • 而且为什么要返回IList?这样不能控制存储类型,要是IList实现的不好的话性能会差很多的。

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2010年7月28日 1:00
    版主
  • 那应该返回什么? 应该怎么测

    2010年7月28日 2:25
  • petshop中不就是返回的IList吗?
    2010年7月28日 2:48
  • 一般IList 的实现都是用的 List<> 和Array      没有人自己写的。。。


    成为 Microsoft V Dash了。。。 欢迎各位前辈同事在OCS加我
    2010年7月28日 3:01
    版主
  • 那应该返回什么? 应该怎么测


    你要把

     IList<ColumnsInfo> listItem = Columns.GetColumnsList(ColumnsType.None);

       DataSet ds = Columns.GetList("", "OrderID");

    放在函数体外 做全局的  static 字段   这样计时器就不会把创建对象也一起算进去了


    成为 Microsoft V Dash了。。。 欢迎各位前辈同事在OCS加我
    2010年7月28日 3:03
    版主
  • 一般IList 的实现都是用的 List<> 和Array      没有人自己写的。。。


    成为 Microsoft V Dash了。。。 欢迎各位前辈同事在OCS加我

     

         为什么没有人自己写?

    2010年7月28日 3:27
  • 一般IList 的实现都是用的 List<> 和Array      没有人自己写的。。。


    成为 Microsoft V Dash了。。。 欢迎各位前辈同事在OCS加我

     

         为什么没有人自己写?


    因为IList提供的接口主要是指一个数组集合的行为:按照index访问和维护内容。

    这个接口很大程度上是为了保持  Array和List<> 兼容性上 在.net2.0提出来的。

    自己写扩展实现 当然不能违背IList 的初衷,而从初衷的角度来说 List<>在大多数情况下已经足够用了。


    成为 Microsoft V Dash了。。。 欢迎各位前辈同事在OCS加我
    • 已标记为答案 xiawei_hi 2010年7月29日 5:10
    2010年7月28日 5:13
    版主
  • 多谢各位解答,还是不太明白,我只能参照petshop 4.0的实例 写个返回 IList<Info> 的方法,然后把数据输出到页面........
    2010年7月28日 7:05
  • 哥们,我在OCS上没看到你。
    2010年12月9日 10:00