4

WindowsAzureで実行されているWebアプリケーションがあります。ASP.Net 4.0、MVC 3、Entity Framework 4.1、SQL Server 2008で、リポジトリパターンを使用して構築されています。

アプリは最近まで非常にうまく機能していました。ほとんどのお客様は数百行のデータを持っていますが、そのうちの1つは2000以上に達し始めています。これにより、ページの読み込み時間が大幅に遅くなりました(一部のページでは15〜20秒)。

MiniProfilerの使用を開始しました。これは、SQL呼び出しが重複している非常におしゃべりなアプリがあることを示しています。

可能な限り詳細を説明し、私たちが物事をより良くする方法を理解するために、私はいくつかのことを説明します。

2つの保護されたオブジェクト(CurrentUserとCurrentCompany)を持つベースコントローラーがあります。これらはアクションでかなり使用しますが、毎回DBにヒットします。したがって、これらのオブジェクトを初めてセッションに保存する必要があると想定しています。これらのオブジェクトの周りにまとめることに大きなオーバーヘッドがありますか?後でそれらの関係にアクセスするのはどうですか(CurrentCompany.Offices.First()など)?

これらのオブジェクトに基づいて各ページのデータを取得します。たとえば、次のように、それらの関係の選択、順序付け、フィルタリングを行います。

CurrentCompany.Employees.Where(r => r.StatusId = Enums.Statuses.Active);

ここで、「CurrentCompany.Employees」はEntityCollectionを返しますが、Wh​​ereはそれをIEnumerableに変更します。IQueryableが進むべき道だと聞きましたか?

また、EFは物事をすばやく立ち上げて実行するのに最適ですが、大量のデータでうまく機能するように調整する必要があることも読みました。私が読んだことから、2列だけを要求した場合でも、行全体が返されますか?

したがって、これらすべてを念頭に置いて、大規模なクライアント向けにこの規模を実現するために私が何をすべきかを誰かが指摘できますか。結局、2000行以上はそれほど多くはありません。ビュー/ストアドプロシージャを使用する必要がありますか?

基本的な選択などを使用してEFをセットアップする方法を説明するリソースはたくさんありますが、データセットが大きくなると実際にそれをスケーリングするものはありません。

どんな助けでも大歓迎です。ブライアン

4

3 に答える 3

3

不思議なことに、手がかりは2000行にあるかもしれません。SQLは、選択肢がデータセットの0.1%を通過したときに、データにアクセスする方法を変更します。テーブルに適切なインデックスがあるかどうかはわかりません。 http://www.sqlteam.com/article/sql-server-indexes-the-basics が役立つ場合がありますSQLmanagmentstudioを実行している場合、不足しているインデックス機能があります http://msdn.microsoft.com/en-us/ library / ms345524.aspx

HTH

こちらも http://blogs.msdn.com/b/sqlazure/archive/2010/08/19/10051969.aspx

于 2012-05-02T13:59:17.207 に答える
1

どのくらいの熱心な読み込みを行っていますか?これは、パフォーマンスに大きな影響を与えることがわかった1つのことでした。それを解決するために、Entlib Caching Application Blockを使用してプロパティをキャッシュ し、キャッシュからオブジェクトにマージするのではなく、DBから取得するようにしました。

于 2012-05-02T14:05:50.477 に答える
0

私自身の経験によると、EFはLINQを使用しているため非常に遅い(非常に遅い)私は個人のWebサイト(複数の種類のデータを表示するホームページであるため、LINQのデータベースサーバーに対して複数の要求を行う必要がありました)を持っていました。非常に遅いので、遅延読み込みオプションなどを使用してEF .edmxを微調整しようとしました......私が見つけた唯一の解決策は、linqを削除し、ado.netで書き直すことでした。コードですが、速度の問題を取り除きます..... LINQリクエストはSQLに変換する必要があります。データベースに到達するまでに多くの手順があり、データを取得すると(select *)、リストに変換されます。 EFのオブジェクトモデルの。ありがとうございます

于 2012-05-17T14:43:32.220 に答える