0

让我再试一次...

视图模型的 MVC 3 存储库模式自动映射器

我把我的应用程序放到我的服务器上,当加载仪表板(这反过来加载 5 个 Kendo UI 图表)时,它使服务器陷入困境,处理器达到 100% 的峰值。IT 需要 5-10 秒来加载页面。

我正在尝试使用 EF Profiler 进行优化。我注意到进行了各种查询,当您看到我的仪表板控制器时,这是有道理的。但是 AutoMapper 似乎需要很长时间才能将 1800 多条记录转换为视图模型。我可以缓存我的 repo 以在控制器或其他东西上使用吗?

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

我最终使用了存储过程来进行计算,然后只加载必要的(少一吨)行。感觉不太理想,但正如另一位发帖者所说,让工具做他们最擅长的事情,而 sql 在这种情况下最擅长数据聚合。

于 2012-12-19T17:00:55.510 回答