zoukankan      html  css  js  c++  java
  • 无索引状态下比较DataTable的几种过滤方法效率

    先构造一个DataTable:

     1 public DataTable GetDataTable()
     2         {
     3             DataTable dtTmp = new DataTable();
     4             dtTmp.Columns.Add("1", typeof(string));
     5             dtTmp.Columns.Add("2", typeof(string));
     6             dtTmp.Columns.Add("3", typeof(string));
     7             dtTmp.Columns.Add("4", typeof(string));
     8             dtTmp.Columns.Add("5", typeof(string));
     9             dtTmp.Columns.Add("6", typeof(string));
    10             dtTmp.Columns.Add("7", typeof(string));
    11             dtTmp.Columns.Add("8", typeof(string));
    12 
    13             for (int i = 0; i < 1000; i++)
    14             {
    15                 DataRow dr = dtTmp.NewRow();
    16                 
    17                 dr["1"] = "数据" + i;
    18                 dr["2"] = "数据" + i;
    19                 dr["3"] = "数据" + i;
    20                 dr["4"] = "数据" + i;
    21                 dr["5"] = "数据" + i;
    22                 dr["6"] = "数据" + i;
    23                 dr["7"] = "数据" + i;
    24                 dr["8"] = "数据" + i;
    25 
    26                 dtTmp.Rows.Add(dr);
    27             }
    28 
    29             return dtTmp;
    30         }

    建立单元测试项目:

     1 [TestClass]
     2     public class UnitTest1
     3     {
     4         Class1 cs1;
     5         DataTable dt;
     6         public UnitTest1()
     7         {
     8             cs1 = new Class1();
     9             dt = cs1.GetDataTable();
    10         }
    11 
    12         [TestMethod]
    13         public void TestMethod0()
    14         {
    15             /*空测试项目*/
    16         }
    17 
    18         [TestMethod]
    19         public void TestMethod1()
    20         {
    21             DataTable dtt = dt.AsEnumerable().Where(o => o.Field<string>("1").Contains("0")).AsDataView().ToTable();
    22         }
    23 
    24         [TestMethod]
    25         public void TestMethod2()
    26         {
    27             DataTable dtt = (from a in dt.AsEnumerable() where a.Field<string>("1").Contains("0") select a).AsDataView().ToTable();
    28         }
    29 
    30         [TestMethod]
    31         public void TestMethod3()
    32         {
    33             dt.AsDataView().RowFilter = "[1] like '%0%'";
    34             DataTable dtt = dt;
    35         }
    36 
    37         [TestMethod]
    38         public void TestMethod4()
    39         {
    40             DataTable dtt = dt.Select("[1] like '%" + "0" + "%'").CopyToDataTable();
    41         }
    42     }

    运行后看效率:

    1000行数据量:

    10000行数据量:

    100000行数据量:

    1000000行数据量:

    DataTable无索引状态下测试,也是日常最常用的数据过滤方法之一,

    再大就不测了,数据量太大放DataTable本来就不适合,可以考虑nosql了,效率吗,如上,仅供参考,欢迎拍砖.

  • 相关阅读:
    【每天都要看一下】
    【这里有别人的经验,也有好玩的发现】
    【WPF】Listbox模板内button点击选中当前listboxItem
    【WFP】弹出窗口不在win10 任务列表里显示的方法
    PSD路径转换为 WPF path 的data
    【WPF】Listbox内item的样式替换默认选中样式和鼠标滑过样式
    【WPF】ListBox1内嵌套ListBox2 2的滑轮滚动阻止1的滚动解决方法
    【C#】文本框拼音检索汉字
    【WPF】Datagrid显示最低下一跳
    【C#】绝对随机数
  • 原文地址:https://www.cnblogs.com/michael90/p/6022980.html
Copyright © 2011-2022 走看看