web-dev-qa-db-ja.com

ADO.NETおよびEntity Frameworkのパフォーマンス分析

どちらがパフォーマンスが向上しますか? ADO.NETまたはEntity Framework。

これらは、分析したい2つの方法です。

ADO.NETテストメソッド

public void ADOTest()
{
    Stopwatch stopwatch = Stopwatch.StartNew();
    using (SqlConnection con = new SqlConnection(connection))
    {
        string Query = "select * from Product ";
        SqlDataAdapter da = new SqlDataAdapter(Query, con);
        DataSet ds = new DataSet();
        con.Open();
        da.Fill(ds);
        DataView dv = ds.Tables[0].DefaultView;
    }
    stopwatch.Stop();
    Console.WriteLine("ADO.NET Time Elapsed={0}", stopwatch.Elapsed);
}

エンティティフレームワークテストメソッド

public void EFTest()
{
    Stopwatch stopwatch = Stopwatch.StartNew();
    var list = _OnlineStoreEntities.Products.ToList();
    stopwatch.Stop();
    Console.WriteLine("Entity Framework Elapsed={0}", stopwatch.Elapsed);
}

初回実行の結果

上記の方法を100回以上実行したとき。平均実行時間は画像に示されています:

first result

ADO.NETは、Entity Frameworkが4ミリ秒以上かかった場合でも2ミリ秒しかかかりませんでした。

2回目の実行結果

このメソッドを1回実行して何度も実行したとき。 ADO.NETとEF間の平均実行時間はそれほど長くありません。

second result

質問

  1. EFは初回実行時に非常に最悪のパフォーマンスを発揮すると思います。それでは、なぜEFを使用するのでしょうか。
  2. EFの2回目の実行が最初の実行よりも高速だったのはなぜですか?
37
Niventh
  1. EFが初めてメタデータをメモリに読み込むには時間がかかります。 edmxファイルから、または最初にコードを使用している場合はソースコードから、モデルのメモリ内表現を構築します。実際、EFはADO.NETの最上位に構築されているため、高速化することはできません。しかし、それは開発muchをより速くします。また、コードの保守性が向上します。
  2. 1を参照

Msdnの記事をご覧ください パフォーマンスの考慮事項(Entity Framework)

56
  • 1)EFは、データベースを操作するときに多くのことをより快適にします。それ以外の場合は手作業でコーディングしなければならないことが、内部で多く行われています。

たとえば、私の最初の大きなプロジェクトの1つはデータを大量に扱うことで、ADO.NETでアクセスレイヤーを実装しました。これは、プロジェクト全体の4分の1から3分の1を埋め合わせました。

今日のEFの経験から、そのほとんどすべてを取り除くことができました!手作業で書いた複雑なコードの多くをまったく不要にしているだけです。ここで数千行について話しています。

  • 2)ここには2つの主な理由があります。まず、EFはADO.NETを使用して構築されます。これは、EFが行うすべてのことを意味します。ADOが行うものにオーバーヘッドを追加します。メモリ割り当てとあらゆる種類の初期化。

つまり、複数回実行するコードは、2回目以降ははるかに高速に実行されます。一方、EFクエリを1回だけ実行すると、これらの初期化から何も得られません。

実際のアプリケーションでは、 Compiled Queries を使用するなどの最適化を試みることができます。パフォーマンスに関しては、クエリを実行するたびに一度だけ準備してコンパイルする必要がないため、これは非常に役立ちます。

12
Jens H

Microsoftで働いている間に、両方のパフォーマンスを比較するブログ記事を書きました。現在、移行中のようですので、インターネットアーカイブにアクセスして検索する必要があります...

私たちは、EFを使用するパフォーマンスコストがひどくなく、V1で完全ではなく、非常に使いやすいものであることを確認することに重点を置いていました。

ほぼ10年後、EFチームはADO.Net上に設計されたEntity Frameworkを設計することにより、パフォーマンスを改善し、特に悪いケースのシナリオを減らす良い仕事をしました。したがって、主な基準が未加工のパフォーマンスである場合は、手作業で最適化されたSQLを使用してADO.Netに移行する必要があります。

そうは言っても、それ以外の多くの優れた開発者は、最高のSQLを作成しません。 Entity Frameworkは、クエリの作成からそれらを分離し、適切なプラクティスを使用して合理的に適切なクエリを生成します。

Entity Frameworkの主な利点は、データを操作するためのより高いレベルの抽象化を提供し、基礎となるデータモデルからアプリ開発者を分離することです。そのため、EFを使用して生産性を高め、より少ないデータアクセスコードを記述します。特定のクエリまたはデータ操作を微調整できます。たとえば、ビジネスアプリケーションの最大部分である、パフォーマンスが重要ではないコードでのプログラミングを容易にする抽象化を失うことはありません。

6
Bruno Guardia