2017-08-12 4 views
1

私はアプリケーションでコードファーストアプローチでEntity Frameworkを使用しています。しかし、私は自分のエンティティにたくさん取り組んでいます。実際、アプリケーションのすべての使用法は、エンティティの追加、更新、削除を常時行っています。チュートリアルや質問のすべてにおいて、文脈がそのように使用されます。エンティティフレームワークのDBコンテキストが頻繁に使用される

using (var ctx = new MyDBEntities()) 
{ 
    //Operations 
} 

また、あなたが最初に1つのコンテキストを作成し、すべてのアプリケーションの存続期間中に同じものを使うべきではないと言っています。私は操作後に接続を閉じることが重要であることを知っていますが、私は、ただ一つの行を更新し、それを残すという新しいコンテキストの絶え間ない作成は神の解決策ではないと思います。私は自分のデータベースに頻繁にアクセスしています(読んでも)時間とメモリを増やすもの(GarbageCollectorはすぐに削除しません)の消費です。

あなたのご意見をお聞かせください。私はそれをより効率的にするために何をすべきですか?

+0

大きな違いはありませんが、エンティティフレームワークは、大量のデータを含む高速な使用のために作られていません。代わりに 'Dapper' – Valkyrie

+0

*新しいコンテキストを使って1行を更新することをお勧めします*いいえ、作業単位をコミットする:はい。 –

+0

@GertArnold、あなたはどういう意味ですか?私は通常、単一のものを更新する必要があります。 – Niko

答えて

1

TL; DR:それは異なります。

私は接続のオープンとクローズの繰り返しについて心配するつもりはありません。私はいくつかのコメントがいくつかの点に当たったと思います。もしあなたがするべき仕事のブロック、いくつかの挿入物、いくつかの更新などがあれば、私はそれらをすべて一つの文脈の下で行います。それがすべて無関係な場合、各イベントハンドラはそれ自身のコンテキストを持つ必要があります。

EFはかなり良いパフォーマーになることができますが、テラバイトのデータをロードするのには使用しませんが、中程度のボリュームでは問題ありません。適切な索引付けを使用してデータベーススキーマがルックアップをサポートしていることを確認してください。これはおそらく、アプリケーションで行うことができるものよりも長くなります。プロファイラを使用してSQLサーバを監視し、妥当なテーブルサイズを使用していることを確認し、何が最長の時間を取っているかを確認します。

関連する問題