2013-02-27 134 views
30

哪一个性能更好? ADO.NET或实体框架。性能分析ADO.NET和实体框架

这些是我想分析的两种方法。

ADO.NET测试方法

public void ADOTest() 
{ 
    Stopwatch stopwatch = Stopwatch.StartNew(); 
    using (SqlConnection con = new SqlConnection(connection)) 
    { 
     string Query = "select * from Product "; 
     SqlDataAdapter da = new SqlDataAdapter(Query, con); 
     DataSet ds = new DataSet(); 
     con.Open(); 
     da.Fill(ds); 
     DataView dv = ds.Tables[0].DefaultView; 
    } 
    stopwatch.Stop(); 
    Console.WriteLine("ADO.NET Time Elapsed={0}", stopwatch.Elapsed); 
} 

实体框架的测试方法

public void EFTest() 
{ 
    Stopwatch stopwatch = Stopwatch.StartNew(); 
    var list = _OnlineStoreEntities.Products.ToList(); 
    stopwatch.Stop(); 
    Console.WriteLine("Entity Framework Elapsed={0}", stopwatch.Elapsed); 
} 

结果在第一次执行

当我在更多跑这上面的方法比100倍。的平均执行时间被示出在图像中:

first result

ADO.NET只用了2毫秒实体框架是否花了超过4毫秒。

结果在第二次执行

当我在一次运行中一次又一次跑了这种方法。 ADO.NET和EF之间的平均执行时间是不是更多:

second result

问题

  1. 我认为EF给出了第一次执行最糟糕的表现那么为什么我们使用EF?
  2. 为什么EF第二次执行比第一次执行更快?
+0

https://stackoverflow.com/questions/15107992/performance-analyze-ado-net-and-entity-framework – Omkar 2018-02-23 12:08:49

回答

51
  1. EF首次将元数据加载到内存中,这需要一段时间。它从edmx文件构建模型的内存表示,或者如果您首先使用代码,则从源代码构建。实际上EF是建立在ADO.NET的顶端,所以它不能更快​​。但它使发展更快。并且提高你的代码的可维护性的
  2. 见1

采取MSDN上的文章Performance Considerations (Entity Framework)

+1

如果您使用LINQ从数据库中提取或处理选择性数据,EF会更快。一个大的或复杂的SQL查询可以实现为简单的LINQ查询,在EF中运行速度比ADO.NET快。我们不应该将ADO.NET与EF进行比较,只是为了获取简单的数据。 – rafidheen 2015-12-24 06:34:00

+0

我认为在涉及复杂查询时,LINQ比SQL更简单是相当主观的。 – user441521 2018-02-13 15:52:03

10
  • 1)EF使得很多事情更舒适使用数据库时的样子。在引擎盖下有很多事情要做,否则你必须手动编写代码。

例如,一个我的第一个大项目,正在处理大量的数据和我实现与ADO.NET接入层。这弥补了整个项目四分之一甚至三分之一的差距。

凭借我今天的英孚教育经验,我几乎可以摆脱所有这些! 我只是用手完成很多复杂的代码,完全不需要。我们在这里谈论数千行。

  • 2)主要有两个原因在这里。首先,EF建立在使用ADO.NET之上。这意味着EF的作用就是增加额外开销,无论ADO会做什么。第二个(非常)简单地说,JIT编译器第一次编译代码就在执行时。这包括内存分配和各种初始化。

这意味着您多次运行的代码在第二次运行时运行得更快。另一方面,如果只执行一次EF查询,那么您将不会从这些初始化中获益。

在实际应用中,你可能会尝试做一些优化,例如使用Compiled Queries。性能明智这将帮助你很多,因为现在你的查询不需要准备和编译每次你运行它们,但只有一次。

1

在微软工作时,我写了一篇博文来比较两者的性能。似乎它正在被迁移过程中,所以你可能需要去互联网档案找到它...

我们专注于确保使用EF的性能成本并不可怕,而不是完美的V1,但相当实用。

虽然几乎10年后的EF团队已经做了很好的工作,提高了性能,特别是减少了不好的情况下的方案,由设计实体框架坐在了ADO.Net。因此,如果您的主要标准是原始性能,您应该使用手动优化的SQL来使用ADO.Net。这就是说,许多其他好的开发人员,不要制作最好的SQL;实体框架将它们与编写查询隔离开来,并使用良好实践来产生相当好的查询。

实体框架的主要优点是提供更高的抽象水平数据的工作,隔离底层数据模型的应用程序开发人员。所以你会使用EF来提高工作效率,编写更少的数据访问代码;你仍然可以微调特定查询或数据操作,而不会丢失,使编程更加容易在非性能关键代码,这是任何企业aplication最大的部分,例如抽象。