0

個別のレイヤーに分割されたPOCOクラスを使用しているMVC3アプリがあります。一般的なリポジトリパターンも実装しました。

管理用の剣道UIチャートを使用してリアルタイムの統計を表示するダッシュボードがあります。データベースが大きくなるにつれて、ダッシュボードはどんどん遅くなります。私はこれらの理由を見つけました:

  1. レコードは毎日増えます
  2. 各グラフはリポジトリを呼び出して、LINQで統計を計算するためのすべての行を取得します
  3. Automapperは、モデルを表示するためのモデルを作成しています

データベースのストアドプロシージャを使用して、統計に必要な数値を正確に取得することで、これを高速化したいと思います。私はこれをどのように実装すべきかわかりません...それはとても間違っていると感じていますが!任意のヒント?

リポジトリコードを使用したコントローラーの例

Public Class DashboardController
    Inherits BaseController

    Private ticketRepo As MaintenanceTicketsRepository

    Public Sub New()
        Me.ticketRepo = New MaintenanceTicketsRepository(New TicketContext)
    End Sub

    Function Chart_OpenItems() As ActionResult
        Dim tickets As IList(Of MaintenanceTicket) = ticketRepo.GetAll().Include(Function(p) p.Priority).Include(Function(s) s.Status).OrderBy(Function(o) o.PriorityId).ToArray()
         'Do some work with repo then dispose'
    End Function

    Function Chart_ClosedItems() As ActionResult
        Dim tickets As IList(Of MaintenanceTicket) = ticketRepo.GetAll().Include(Function(p) p.Priority).Include(Function(s) s.Status).OrderBy(Function(o) o.PriorityId).ToArray()
         'Do some work with repo then dispose'
    End Function
End Class
4

1 に答える 1

1

あなたの質問に答えようとしています。SQL Server を離れる前にストアド プロシージャを使用してデータを集計することで、モデルに送信されるデータの量を減らすことができる場合は、それを実行してください。実際の実装の詳細は、使用している ORM セットアップの種類によって異なります。1800 行を 100 行以上に減らすことができれば、ほぼ確実に速度が向上します。

于 2012-12-17T17:29:32.937 に答える