39

どちらがより良いパフォーマンスを提供しますか?ADO.NETまたはEntityFramework。

これらは私が分析したい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);
}

EntityFrameworkのテスト方法

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

初めて実行する結果

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

最初の結果

エンティティフレームワークに4ミリ秒以上かかったかどうかにかかわらず、ADO.NETには2ミリ秒しかかかりませんでした。

2回目の実行になります

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

2番目の結果

質問

  1. EFは、初回実行時に非常に悪いパフォーマンスを示すと思います。では、なぜEFを使用するのでしょうか。
  2. EFの2回目の実行が1回目の実行よりも速かったのはなぜですか?
4

4 に答える 4

61
  1. EFが初めてメタデータをメモリにロードするとき、これには時間がかかります。edmxファイルから、または最初にコードを使用している場合はソースコードから、モデルのメモリ内表現を構築します。実際、EFはADO.NETの最上位に構築されているため、これ以上高速化することはできません。しかし、それは開発をはるかに速くします。また、コードの保守性が向上します。
  2. 1を参照

msdnの記事「パフォーマンスに関する考慮事項(エンティティフレームワーク) 」をご覧ください

于 2013-02-27T09:14:56.890 に答える
14
  • 1)EFは、データベースを操作するときに多くのことをより快適にします。内部では、手動でコーディングしなければならないことがたくさんあります。

たとえば、私の最初の大きなプロジェクトの1つはデータを大量に処理することであり、ADO.NETを使用してアクセスレイヤーを実装しました。これは、プロジェクト全体の4分の1または3分の1の間の何かを補いました。

今日のEFの経験で、私はそのほとんどすべてを取り除くことができました!手で書いた複雑なコードを完全に不要にするだけです。ここでは何千もの行について話しています。

  • 2)ここでの2つの主な理由。まず、EFはADO.NETを使用する上に構築されます。これは、EFが行うことはすべて、ADOが行うことすべてにオーバーヘッドを追加することを意味します。第二に(非常に)簡単に言えば、JITコンパイラは実行されたときに初めてコードをコンパイルします。これには、メモリ割り当てとあらゆる種類の初期化が含まれます。

これは、複数回実行するコードが2回目以降はるかに高速に実行されることを意味します。一方、EFクエリを1回だけ実行すると、それらの初期化によるメリットはありません。

実際のアプリケーションでは、コンパイル済みクエリの使用など、いくつかの最適化を試みる場合があります。パフォーマンスの面では、これは非常に役立ちます。これは、クエリを実行するたびにクエリを準備してコンパイルする必要がなく、1回だけであるためです。

于 2013-02-27T09:30:35.630 に答える
8

マイクロソフトで働いている間、私は両方のパフォーマンスを比較するブログ投稿を書きました。現在移行中のようですので、インターネットアーカイブにアクセスして見つける必要があるかもしれません...

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

ほぼ10年後、EFチームはパフォーマンスを改善し、特に悪いケースのシナリオを減らすために優れた作業を行いましたが、設計上、EntityFrameworkはADO.Net上にあります。したがって、主要な基準が生のパフォーマンスである場合は、手動で最適化されたSQLを使用してADO.Netを選択する必要があります。

そうは言っても、他の点では優れた開発者の多くは、最高のSQLを作成していません。Entity Frameworkは、クエリの記述からそれらを分離し、適切な方法を使用して適度に適切なクエリを生成します。

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

于 2017-01-27T16:04:09.453 に答える
3

EFは、初回実行時に非常に悪いパフォーマンスを示すと思います。では、なぜEFを使用するのでしょうか。

  1. データアクセス層用に自動生成されたコード
  2. 開発時間とコストを削減します
  3. LINQクエリも許可します。

EFの2回目の実行が1回目の実行よりも速かったのはなぜですか?

はい。EFの最も重要な機能の1つは、キャッシュです。

于 2020-03-28T12:28:15.013 に答える