ささいなことですが。

Windowsアプリテスト自動化ライブラリFriendly開発者の日記です。

lambdicSql - パフォーマンス改善せねば ③計測 -

※この書き方は最新のLambdicSqlとは異なります。速度計測の記録なので以前のままにしております。

もう少し詳しく計測してみることにします。
VisualStudioのパフォーマンスプロファイラが便利ですね。
VSTestではイマイチやりにくいのでコンソールアプリでやります。

using System;

namespace Performance
{
    class Program
    {
        static void Main(string[] args)
        {
            //ユーザー入力を待つ
            Console.ReadLine();
            
            //テスト実行
            SelectTime.CheckLambdicSqlCondition();
            Console.WriteLine("Finish");
            Console.ReadLine();
        }
    }
}

起動時間とかでノイズを拾うと結果が見づらくなるので、一時停止して開始を選びます。
f:id:ishikawa-tatsuya:20160713005547p:plain
で、起動が終わると、再開させます。
f:id:ishikawa-tatsuya:20160713005737p:plain
そして何かキー入力をして、本当に計測したい処理を実行。
CheckLambdicSqlConditionの中では1000回クエリを発行しています。

internal static void CheckLambdicSqlCondition()
{
    CheckTimeCore(connection =>
    {
        int x = 1;
        var datas = Sql.Query<DB>().SelectFrom(db => db.TableValues).
               Where(db => db.TableValues.IntVal == x).ToExecutor(connection).Read().ToList();
    });
}
static void CheckTimeCore(Action<SqlConnection> action)
{
    using (var connection = new SqlConnection(TestEnvironment.ConnectionString))
    {
        connection.Open();
        for (int i = 0; i < 1000; i++)
        {
            action(connection);
        }
    }
}

終わったら停止を押します。

こんな感じでログが出ます。
f:id:ishikawa-tatsuya:20160713010308p:plain
ファイアスポットが分かりますね。
で、クリックするとさらに詳細な情報が分かります。
f:id:ishikawa-tatsuya:20160713010403p:plain

Expressionの解析も重いですが、しょうもないところでも時間を無駄にしていることが分かりますね。
まだまだ改善できそうです!