实体框架表现不佳

本文关键字:框架 实体 | 更新日期: 2023-09-27 18:21:45

在此处输入图像描述

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

我的数据库有一个名为Ticket的表,有49300条记录。此表链接了多个其他表。实体框架图位于:https://i.stack.imgur.com/3Lgyb.png

记录计数如下:

计费选项4390公司联系人687位置3成员16ServiceBoard 6ServiceItem 0服务优先级8ServiceSource 5服务状态93服务子类型668服务类型20门票49300时间条目52518TimeEntryMember 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.ProxyCreateEnabled=false;var returnValue=(来自DataAccessLocal.dc.Tickets.AsNoTracking()中的r选择新的LinqTicket{Summary=r.Summary,DetailDescription=r.摘要,分辨率=r。分辨率,CompanyName=r.Company.CompanyName,ContactName=(r.Contact==null?string.Empty:r.Contact.FirstName+"+r.Contact.LastName),BoardName=r.ServiceBoard.ServiceBoardName,优先级=r.ServicePriority.ServicePriorityName,Source=r.ServiceSource.ServiceSourceName,位置=r.Location.LocationName,ServiceType=r.ServiceTypeRecId==null?一串空:r.ServiceType.ServiceTypeName,ServiceSubType=r.ServiceSubTypeRecId==null?一串空:r.ServiceSubType.ServiceSubTypeName,ServiceItem=r.ServiceItemRecId==null?一串空:r.ServiceItem.ServiceItemText,StatusName=r.ServiceStatus.ServiceStatusName,TicketRecId=r.TicketRecId,RemoteTicketId=r.RemoteTicketRecId值,DueDate=r.RequiredDate==空?new DateTime(1900,1,1):r.RequiredDate.Value,EstimatedHours=r.BudgetHours==空?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.ProxyCreateEnabled=lastValue2;return returnValue;}

实体框架表现不佳

如果您真的需要将那么多记录绑定到DataGridView,您应该使用虚拟模式。

引用msdn在Windows窗体DataGridView控件中实现实时数据加载的虚拟模式:

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