C# 实体框架性能差
我在C#Windows窗体应用程序中使用EF 6.1.1,在性能因素方面遇到了奇怪的问题 我的数据库有一个名为C# 实体框架性能差,c#,sql,entity-framework,datagridview,C#,Sql,Entity Framework,Datagridview,我在C#Windows窗体应用程序中使用EF 6.1.1,在性能因素方面遇到了奇怪的问题 我的数据库有一个名为Ticket的表,有49300条记录。此表链接了多个其他表。实体框架图位于: 记录计数如下: BillableOption 4 Company 390 Contact 687 Location 3 Member 16 ServiceBoard 6 ServiceItem 0 ServicePriority 8 ServiceSource
Ticket
的表,有49300条记录。此表链接了多个其他表。实体框架图位于:
记录计数如下:
BillableOption 4
Company 390
Contact 687
Location 3
Member 16
ServiceBoard 6
ServiceItem 0
ServicePriority 8
ServiceSource 5
ServiceStatus 93
ServiceSubType 668
ServiceType 20
Ticket 49300
TimeEntry 52518
TimeEntryMember 0
WorkRole 10
WorkType 5
如果确实需要将那么多记录绑定到DataGridView,那么应该使用 引用msdn: 在DataGridView控件中实现虚拟模式的一个原因是仅在需要时检索数据。这称为即时数据加载
.ToList()方法占用的时间最长。@SanketShah,使用虚拟模式不会有问题,因为只在需要时检索数据。并非一次检索所有记录。是否有与EF 6相关的样本?我正在使用
DbContext
方法。@SanketShah,不,我没有任何示例在EF6的虚拟模式下使用DataGridView。
public static List 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 = (from r in DataAccessLocal.dc.Tickets.AsNoTracking()
select new LinqTicket
{
Summary = r.Summary,
DetailDescription = r.Summary,
Resolution = r.Resolution,
CompanyName = r.Company.CompanyName,
ContactName = (r.Contact == null ? string.Empty : r.Contact.FirstName + " " + r.Contact.LastName),
BoardName = r.ServiceBoard.ServiceBoardName,
Priority = r.ServicePriority.ServicePriorityName,
Source = r.ServiceSource.ServiceSourceName,
Location = 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 ? new 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;
return returnValue;
}