1

データベースとして SQL Server Compact Edition 4.0 を使用し、Entity Framework を使用しています。いくつかの計算を行う DataGrid があります (8 列 x 10 行のテスト データを使用し、計算は行ごとに 1 回実行されるため、10 回のみ)。

エンティティ クエリを使用すると、calc メソッドが著しく遅くなります。それらを削除すると、結果は瞬時です(タイムラグを識別できません)。

次の 1 行のコードを検討してください。

Account a = (from accounts in context.Account select accounts).FirstOrDefault();

それを行う代わりにcontext.Account、計算を行うメソッドを実行する前に、データを取得してリストに入れました。

List<Account> accountsTable = context.Account.ToList();

次に、上記のコード行を次の行に置き換えます。これは、エンティティではなくリストをクエリすることを除いて同じことを行います。

Account a = (from accounts in accountsTable select accounts).FirstOrDefault();  

このList<Account>方法を使用すると、パフォーマンスが低下することはありません。

エンティティを使用するとデータベースにクエリが実行され、オーバーヘッドが発生することは理解していますが、ローカル DB (つまり、ネットワークの問題がないなど) と 10 行のデータを使用すると、無視できると思います。

この投稿を見ました: SQL Server CE 4.0 Entity Framework、クエリの実行が非常に遅い (SQL Server CE 3.5 と比較して)が、それはここでは問題ではありません。

私は単純なものを見逃しているに違いありません - 誰かが私を啓発することができれば、私はとても感謝しています.

4

1 に答える 1

0

以下を使用すると、パフォーマンスが向上しますか?

using System.Linq;
Account a = context.Account.FirstOrDefault();

クエリが最初に (リストに) 解決されてから、FirstOrDefault に渡されたと思われます。直接実行FirstOrDefaultすると、コードを読み取るレコードが少なくなり、パフォーマンスが向上すると思います。

于 2013-02-08T23:32:35.237 に答える