0

これをもう一度試してみましょう...

ViewModel 用の MVC 3 リポジトリ パターン オートマッパー

アプリをサーバーに配置し、ダッシュボードをロードすると (5 つの Kendo UI チャートがロードされます)、サーバーが停止し、プロセッサが 100% でピークに達します。ページの読み込みには 5 ~ 10 秒かかります。

EF Profiler で最適化しようとしています。あらゆる種類のクエリが作成されていることに気付きました。これは、私のダッシュボード コントローラーを見ると理にかなっています。しかし、AutoMapper は 1800 を超えるレコードをビューモデルに変換するのに長い時間がかかるようです。コントローラーなどで使用するためにレポをキャッシュできますか?

Public Class DashboardController
    Inherits BaseController

    Private ticketRepo As MaintenanceTicketsRepository

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

    Function Chart_OpenItemsByPM() As ActionResult
        Dim tickets = ticketRepo.GetAll().Include(Function(p) p.Priority).Include(Function(s) s.Status).OrderBy(Function(o) o.PriorityId).ToArray()

        Mapper.CreateMap(Of MaintenanceTicket, PieChartViewModel)()

        Dim queue As PieChartViewModel() = Mapper.Map(Of MaintenanceTicket(), PieChartViewModel())(tickets)

        Dim ticketCounts = From t In queue _
                           Where t.StatusName = "Open" And _
                           t.PriorityName <> "Not Ready" _
                           Group t By t.PriorityName Into Count() _
                           Select PriorityName, Id = Count

        Return Json(ticketCounts)
    End Function

更新: 誰かがこれを読んだら、「チケット」オブジェクトの記入についても疑問に思います。各関数が ajax 経由で呼び出されるときに、これを各関数に入力します。つまり、同じ初期データ セットに対して複数のクエリを送信し、後で関数内でスリム化しています。

リポジトリを一度埋めてから再利用するパターンはありますか?

4

1 に答える 1

0

最終的に、計算を行い、必要な (1 トン少ない) 行をロードするストアド プロシージャを使用することになりました。理想的ではありませんでしたが、別の投稿者が言ったように、ツールが得意とすることはツールに任せてください。この状況では、SQL がデータ集約に最適です。

于 2012-12-19T17:00:55.510 に答える