私はまだ問題を抱えていますが、ここの人々の助けを借りて少しずつ近づいています.
私は EF Profiler を使用しています。ダッシュボード コントローラーをロードすると、DB から「本質的に」同じデータを引き戻す多くのクエリが実行されていることがわかります。これが私のコントローラーの例です:
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 As IList(Of MaintenanceTicket) = ticketRepo.GetAll().Include(Function(p) p.Priority).Include(Function(s) s.Status).OrderBy(Function(o) o.PriorityId).ToArray()
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 New With {
.PriorityName = PriorityName,
.Id = Count,
.Explosion = If(.PriorityName = "Critical", "True", "False")
}
Return Json(ticketCounts)
End Function
Function Grid_OpenItemsByPriority(<DataSourceRequest()> request As DataSourceRequest) As ActionResult
Dim tickets As IList(Of MaintenanceTicket) = ticketRepo.GetAll().Include(Function(p) p.Priority).Include(Function(s) s.Status).ToArray()
Dim queue As GridViewModel() = Mapper.Map(Of MaintenanceTicket(), GridViewModel())(tickets)
Dim ticketCounts = From t In queue _
Where _
t.StatusId = 1 And _
t.CreateDate.Year = Convert.ToDateTime(DateTime.Now).Year _
Group t By _
Column1 = CType(t.CreateDate.Month, Integer), _
Column2 = CType(t.CreateDate.ToString("MMMM"), String) _
Into g = Group _
Order By Column1 _
Select New With {
.Id = Column1,
.Month = Column2,
.Critical = g.Count(Function(t) t.PriorityId = 1),
.High = g.Count(Function(t) t.PriorityId = 2),
.Normal = g.Count(Function(t) t.PriorityId = 3),
.Low = g.Count(Function(t) t.PriorityId = 4),
.NotReady = g.Count(Function(t) t.PriorityId = 5),
.Total = g.Count(Function(t) t.Id <> Nothing)
}
Return Json(ticketCounts.ToDataSourceResult(request))
End Function
Protected Overrides Sub Dispose(disposing As Boolean)
ticketRepo.Dispose()
MyBase.Dispose(disposing)
End Sub
End Class
関数 (ajax を介して Kendo Controls に呼び出される) があることがわかりますが、各関数はリポジトリを埋めてから、データをビューモデルにマップします。最終的な出力を得るには、並べ替えて実際の手順を実行する必要があります。 . これを各関数で実行すると、ページの読み込み時間が長くなり、サーバーが急上昇しています。
1 つのクエリでレポを読み込む方法についてのアイデアはありますか?