【问题标题】:Entity Framework Poor Performance实体框架性能不佳
【发布时间】:2014-09-14 16:54:24
【问题描述】:

enter image description here

我在 C# Windows 窗体应用程序中使用 EF 6.1.1,但在性能因素方面遇到了奇怪的问题。

我的数据库有一个名为 Ticket 的表,有 49300 条记录。此表链接了多个其他表。实体框架图可在:http://i.imgur.com/u4gKVFI.png

记录数如下:

计费选项 4 公司 390 联系 687 地点 3 会员 16 服务板 6 服务项目 0 服务优先级 8 服务源 5 服务状态 93 服务子类型 668 服务类型 20 票号 49300 时间条目 52518 TimeEntryMember 0 工作角色 10 工作类型 5

我的 EF 数据上下文可作为类的静态变量全局使用。当我触发以下代码时,加载数据需要 12-15 秒(仅谈论 .ToList() 方法)。 并与 DataGridView 绑定。有什么方法可以提高性能?

公共静态列表 LoadTicket() { bool lastValue1 = DataAccessLocal.dc.Configuration.AutoDetectChangesEnabled; bool lastValue2 = DataAccessLocal.dc.Configuration.ProxyCreationEnabled; DataAccessLocal.dc.Configuration.AutoDetectChangesEnabled = false; DataAccessLocal.dc.Configuration.ProxyCreationEnabled = false; var returnValue = (来自 DataAccessLocal.dc.Tickets.AsNoTracking() 中的 r 选择新的 LinqTicket { 摘要 = r.摘要, DetailDescription = r.Summary, 分辨率 = r.Resolution, CompanyName = r.Company.CompanyName, ContactName = (r.Contact == null ? string.Empty : r.Contact.FirstName + " " + r.Contact.LastName), BoardName = r.ServiceBoard.ServiceBoardName, 优先级 = r.ServicePriority.ServicePriorityName, 源 = r.ServiceSource.ServiceSourceName, 位置 = r.Location.LocationName, ServiceType = r.ServiceTypeRecId == null ? string.Empty : r.ServiceType.ServiceTypeName, ServiceSubType = r.ServiceSubTypeRecId == null ? string.Empty : r.ServiceSubType.ServiceSubTypeName, ServiceItem = r.ServiceItemRecId == null ? string.Empty:r.ServiceItem.ServiceItemText, StatusName = r.ServiceStatus.ServiceStatusName, TicketRecId = r.TicketRecId, RemoteTicketId = r.RemoteTicketRecId.Value, DueDate = r.RequiredDate == null ?新的 DateTime(1900, 1, 1) : r.RequiredDate.Value, EstimatedHours = r.BudgetHours == null ? 0:r.BudgetHours.Value, ServiceBoardId = r.ServiceBoard.ServiceBoardRecId, InternalStatus = r.InternalStatus.HasValue == true ? (enmInternalStatus)r.InternalStatus.Value : enmInternalStatus.OK, LastUpdatedByMemberRecId = r.LastUpdatedByMemberRecId }).ToList(); DataAccessLocal.dc.Configuration.AutoDetectChangesEnabled = lastValue1; DataAccessLocal.dc.Configuration.ProxyCreationEnabled = lastValue2; 返回返回值; }

【问题讨论】:

    标签: c# sql entity-framework datagridview


    【解决方案1】:

    如果您确实需要将这么多记录绑定到 DataGridView,您应该使用Virtual Mode

    引用msdnImplementing Virtual Mode with Just-In-Time Data Loading in the Windows Forms DataGridView Control

    在 DataGridView 控件中实现虚拟模式的一个原因是仅在需要时检索数据。这称为即时数据加载

    【讨论】:

    • .ToList() 方法占用的最大时间。
    • @SanketShah,使用虚拟模式不会有问题,因为只有在需要时才会检索数据。不是一次检索所有记录。
    • 任何与 EF 6 相关的示例?我正在使用DbContext 方法。
    • @SanketShah,不,我没有任何在 EF6 的虚拟模式下使用 DataGridView 的示例。
    猜你喜欢
    • 2014-04-06
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多