C#.NETのサンプルコードを掲載しています。
      
DataReaderとDataAdapter
ADO.NETの高速化の話がでるとDataReaderを使うと速くなるという意見を聞きます。
この話には続きがあり、DataAdapterと比べると何倍も速いといいます。
さて、本当に何倍も速くなるのか?DataReaderとDataAdapterを使ってデータの抽出からメモリ
へ格納するまでの時間を測定して比較してみましょう。

DataReaderテストコード
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

private void button8_Click(object sender, EventArgs e)
{
    SampleCode.ProcessTimeWatch.Add("はじめ");
    List<object[]> objectList = new List<object[]>();

    TaDataBase ado = TaDataBaseFactory.GetDataProviderFactory(TaDataBaseFactory.DBType.PostgreSQLOdbc,
                    @"Driver={PostgreSQL UNICODE};Server=localhost;Port=5432;Database=HP;Uid=test;Pwd=test;");

    ado.Open();

    for (int i = 0; i < 100; i++)
    {
        OdbcDataReader reader = (OdbcDataReader)ado.ExecuteReader("SELECT * FROM bread");

        while (reader.Read())
        {
            object[] objects = new object[reader.FieldCount];
            reader.GetValues(objects);
            objectList.Add(objects);
        }

        reader.Close();
    }

    ado.Close();
    SampleCode.ProcessTimeWatch.Add("終了");

    Console.WriteLine(SampleCode.ProcessTimeWatch.Log);
}

DataAdapterテストコード
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

private void button7_Click(object sender, EventArgs e)
{
    SampleCode.ProcessTimeWatch.Add("はじめ");
    HPDataSet ds = new HPDataSet();

    TaDataBase ado = TaDataBaseFactory.GetDataProviderFactory(TaDataBaseFactory.DBType.PostgreSQLOdbc,
                    @"Driver={PostgreSQL UNICODE};Server=localhost;Port=5432;Database=HP;Uid=test;Pwd=test;");

    ado.Open();
    for (int i = 0; i < 100; i++)
    {
        ado.Fill(ds.bread, "SELECT * FROM bread;");
    }
    ado.Close();
    SampleCode.ProcessTimeWatch.Add("終了");

    Console.WriteLine(SampleCode.ProcessTimeWatch.Log);
}

DataReader、DataAdapterともにbreadテーブルの内容を全てメモリへ格納しています。その処理を100回繰り返します。

    DataReader
    ・1回目 0.1510秒
    ・2回目 0.1030秒
    ・3回目 0.0820秒
    ・4回目 0.1030秒
    ・5回目 0.1030秒

    DataAdapter
    ・1回目 0.1768秒
    ・2回目 0.1442秒
    ・3回目 0.1130秒
    ・4回目 0.1190秒
    ・5回目 0.1110秒

確かにDataReaderの方が速いようです。ですが処理時間に大幅な差があるわけでないようです。
      

ADO.NET







Copyright (C) 2011 - 2017 猫の気ままなC#日記