これをもう一度試してみましょう...
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 経由で呼び出されるときに、これを各関数に入力します。つまり、同じ初期データ セットに対して複数のクエリを送信し、後で関数内でスリム化しています。
リポジトリを一度埋めてから再利用するパターンはありますか?