zoukankan      html  css  js  c++  java
  • DataTable和普通类型存储数据,内存和效率的差别

    测试了一下普通的dt和类型的速度差异, 下面是代码:

    代码
         public class MrInfo
        {
            
    public int versionid { getset; }
            
    public string MCellId { getset; }
            
    public int NCell_Bcch { getset; }
            
    public int NCell_Bsic { getset; }
            
    public double RMS0 { getset; }
            
    public double RMS1 { getset; }
            
    public double RMS2 { getset; }
            
    public double RMS3 { getset; }
            
    public double RMS4 { getset; }
            
    public double RMS5 { getset; }
            
    public double RMS6 { getset; }
            
    public double RMS7 { getset; }
            
    public double RMS8 { getset; }
            
    public double RMS9 { getset; }
            
    public double Total { getset; }
            
    public DateTime CollectTime { getset; }
        }

        
    class Program
        {
            
    static void Main(string[] args)
            {
                Console.WriteLine(DateTime.Now);
                
    //TestNullableInt();
                
    //List<MrInfo> lstMr = TastClass();
                
    //DataTable dt = TestDataTable();
                Console.WriteLine();
                Console.WriteLine(DateTime.Now);
                Console.WriteLine(
    "==OVER==");
                Console.ReadLine();
            }

            
    private static void TestNullableInt()
            {
                
    int i = 100;
                
    int j = 50;
                Console.WriteLine(
    "i:{0},j:{1}", i, j);
                TestInt(i, 
    ref j);
                Console.WriteLine(
    "TestInt(int i, ref int j) i:{0},j:{1}", i, j);
                
    int? ni = 100;
                
    int? nj = 50;
                Console.WriteLine(
    "ni:{0},nj:{1}", ni.Value, nj.Value);
                TestNullInt(ni, 
    ref nj);
                Console.WriteLine(
    "TestNullInt(int? i, ref int? j) i:{0},j:{1}", ni.Value, nj.Value);
            }

            
    static void TestInt(int i, ref int j)
            {
                i
    ++;
                j
    ++;
            }

            
    static void TestNullInt(int? i, ref int? j)
            {
                i 
    = i.Value + 1;
                j 
    = j.Value + 1;
            }

            
    static List<MrInfo> TastClass()
            {
                List
    <MrInfo> lstInfo = new List<MrInfo>();
                
    for (int i = 0; i <= 4000000; i++)
                {
                    MrInfo mr 
    = new MrInfo()
                    {
                        CollectTime 
    = DateTime.Now,
                        MCellId 
    = "460-00-11111-" + i.ToString("00000"),
                        NCell_Bcch 
    = 6,
                        NCell_Bsic 
    = 7,
                        RMS0 
    = 0,
                        RMS1 
    = 1,
                        RMS2 
    = 2,
                        RMS3 
    = 3,
                        RMS4 
    = 4,
                        RMS5 
    = 5,
                        RMS6 
    = 6,
                        RMS7 
    = 7,
                        RMS8 
    = 8,
                        RMS9 
    = 9,
                        Total 
    = 10,
                        versionid 
    = 1
                    };
                    lstInfo.Add(mr);
                    
    if (i % 100000 == 0)
                        Console.Write(
    "^");
                }
                
    return lstInfo;
            }

            
    static DataTable TestDataTable()
            {
                DataTable dt 
    = GetMRTableSchema();
                
    for (int i = 0; i <= 3000000; i++)
                {
                    DataRow dr 
    = dt.NewRow();
                    dr[
    0= 1;
                    dr[
    1= "460-00-11111-" + i.ToString("00000");
                    dr[
    2= 6;
                    dr[
    3= 7;
                    
    for (int j = 0; j < 11; j++)
                    {
                        dr[
    4 + j] = j;
                    }
                    dr[
    "CollectTime"= DateTime.Now;
                    dt.Rows.Add(dr);
                    
    if (i % 100000 == 0)
                        Console.Write(
    "^");
                }
                
    return dt;
            }

            
    static DataTable GetMRTableSchema()
            {
                DataTable mrDataTable 
    = new DataTable();
                mrDataTable.Columns.Add(
    "versionid"typeof(Int32));
                mrDataTable.Columns.Add(
    "MCellId"typeof(String));
                mrDataTable.Columns.Add(
    "NCell_Bcch"typeof(Int32));
                mrDataTable.Columns.Add(
    "NCell_Bsic"typeof(Int32));
                mrDataTable.Columns.Add(
    "RMS0"typeof(double));
                mrDataTable.Columns.Add(
    "RMS1"typeof(double));
                mrDataTable.Columns.Add(
    "RMS2"typeof(double));
                mrDataTable.Columns.Add(
    "RMS3"typeof(double));
                mrDataTable.Columns.Add(
    "RMS4"typeof(double));
                mrDataTable.Columns.Add(
    "RMS5"typeof(double));
                mrDataTable.Columns.Add(
    "RMS6"typeof(double));
                mrDataTable.Columns.Add(
    "RMS7"typeof(double));
                mrDataTable.Columns.Add(
    "RMS8"typeof(double));
                mrDataTable.Columns.Add(
    "RMS9"typeof(double));
                mrDataTable.Columns.Add(
    "Total"typeof(double));
                mrDataTable.Columns.Add(
    "CollectTime", Type.GetType("System.DateTime"));
                
    return mrDataTable;
            }
        }
     
    及时结果差异巨大:
    第一列是内存(M)第二列是执行时间(S)
     

    DT

     

    1百万

    330

    13

     

    333

    12

     

    366

    12

     

    366

    11

     

    368

    12

     

     

    2百万

    604

    26

     

    600

    25

     

    670

    26

     

    688

    26

     

     

     

     

     

    3百万

    1200

    37

     

    1200

    37

     

    1200

    37

     

     

     

     

     

     

     

     

    4百万

    1200

    41

     

    1200

    50

     

     

     

     

     

     

    Class

     

    1百万

    205

    3

     

    206

    3

     

    205

    3

     

    205

    3

     

    205

    3

     

     

    2百万

    387

    6

     

    388

    6

     

    388

    7

     

    389

    6

     

    389

    6

     

     

    3百万

    568

    10

     

    570

    9

     

    570

    9

     

    570

    9

     

    571

    10

     

     

    4百万

    742

    12

     

    744

    11

     

    743

    12

     

  • 相关阅读:
    6)图[5]最短路径
    6)图[4]关键路径
    6)图[3]拓扑排序算法
    6)图[2]Prim算法[最小生成树]
    Aprori算法[关联规则算法]
    K-Modes算法[聚类算法]
    linux Centos6.7 python交互模式下回退异常问题解决
    Python-面向对象(二)-Day7
    Python-面向对象(一)-Day7
    (error) MISCONF Redis is configured to save RDB snapshots
  • 原文地址:https://www.cnblogs.com/dunnice/p/1935553.html
Copyright © 2011-2022 走看看