C#.NETのサンプルコードを掲載しています。
      
ADO.NETが遅い理由①
よく、ADO.NETは遅いということを耳にします。
本当に遅いのか?どこで遅くなっているのか?問題は解消できるのか?を
検証していこうと思います。
まずは、"アクセス方式の非接続型"についてを検証していきます。
(アクセス方式の説明については こちら を参照ください)

そのシステムは本当に不特定多数がアクセスすることを想定したシステム
でしょうか?もしそうであればこの記事は意味ないので読み飛ばしてください。。

不特定多数を気にしないシステムであれば、早くなる可能性があります。
非接続型から接続型にすることを考えてみてください。
よくDataAdapterを使ってるから非接続型と考えてる人がいらっしゃいますが
それは違います。

DataAdapterを使ってもずっと接続する方法はあります。
通常DataAdapterで提供されているFillメソッドやUpdateメソッドを呼び出したとき
自動的にDBと接続して用がなくなったら解除します。
これを非接続型といいます。それではどうやったら接続型になるのか?ですが・・・

簡単です。Fill,Updateを使う前に明示的にオープンするだけです。
気をつけるのはアプリを終了するときに必ずクローズする点です。
さて、それでは速度検証といきましょう^^
テストコード
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
30
31
32
33
34
35

private void button6_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;");

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

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

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);
}

MyADOライブラリで実装してますが、それはご勘弁^^;
このサンプルではDBに対して100回breadテーブルの情報を抽出して格納してます。
まぁ、100回というのは現実味ない数値ですがどれだけ時間の差がでるのかを見て
欲しかったので!button6_Clickが非接続、button7_Clickが接続型です。

    非接続型
    ・1回目 06.503秒
    ・2回目 05.472秒

    接続型
    ・1回目 0.143秒
    ・2回目 0.086秒

どうですか?違いの差は歴然でないでしょうか?
      

ADO.NET







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