どちらがパフォーマンスが向上しますか? 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回以上実行したとき。平均実行時間は画像に示されています:
ADO.NETは、Entity Frameworkが4ミリ秒以上かかった場合でも2ミリ秒しかかかりませんでした。
2回目の実行結果
このメソッドを1回実行して何度も実行したとき。 ADO.NETとEF間の平均実行時間はそれほど長くありません。
質問
Msdnの記事をご覧ください パフォーマンスの考慮事項(Entity Framework)
たとえば、私の最初の大きなプロジェクトの1つはデータを大量に扱うことで、ADO.NETでアクセスレイヤーを実装しました。これは、プロジェクト全体の4分の1から3分の1を埋め合わせました。
今日のEFの経験から、そのほとんどすべてを取り除くことができました!手作業で書いた複雑なコードの多くをまったく不要にしているだけです。ここで数千行について話しています。
つまり、複数回実行するコードは、2回目以降ははるかに高速に実行されます。一方、EFクエリを1回だけ実行すると、これらの初期化から何も得られません。
実際のアプリケーションでは、 Compiled Queries を使用するなどの最適化を試みることができます。パフォーマンスに関しては、クエリを実行するたびに一度だけ準備してコンパイルする必要がないため、これは非常に役立ちます。
Microsoftで働いている間に、両方のパフォーマンスを比較するブログ記事を書きました。現在、移行中のようですので、インターネットアーカイブにアクセスして検索する必要があります...
私たちは、EFを使用するパフォーマンスコストがひどくなく、V1で完全ではなく、非常に使いやすいものであることを確認することに重点を置いていました。
ほぼ10年後、EFチームはADO.Net上に設計されたEntity Frameworkを設計することにより、パフォーマンスを改善し、特に悪いケースのシナリオを減らす良い仕事をしました。したがって、主な基準が未加工のパフォーマンスである場合は、手作業で最適化されたSQLを使用してADO.Netに移行する必要があります。
そうは言っても、それ以外の多くの優れた開発者は、最高のSQLを作成しません。 Entity Frameworkは、クエリの作成からそれらを分離し、適切なプラクティスを使用して合理的に適切なクエリを生成します。
Entity Frameworkの主な利点は、データを操作するためのより高いレベルの抽象化を提供し、基礎となるデータモデルからアプリ開発者を分離することです。そのため、EFを使用して生産性を高め、より少ないデータアクセスコードを記述します。特定のクエリまたはデータ操作を微調整できます。たとえば、ビジネスアプリケーションの最大部分である、パフォーマンスが重要ではないコードでのプログラミングを容易にする抽象化を失うことはありません。