哪一个提供更好的性能? 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次时。平均执行时间显示在图像中:
ADO.NET只花了2毫秒,实体框架是否耗时超过4毫秒。
导致第二次执行
当我一次又一次地运行此方法时。 ADO.NET和EF之间的平均执行时间并不多:
问题
答案 0 :(得分:55)
答案 1 :(得分:11)
例如,我的第一个更大的项目之一是处理大量数据,我使用ADO.NET实现了访问层。这占整个项目的四分之一甚至三分之一。
根据我今天的EF经验,我几乎可以摆脱所有这些! 我只是手工编写的许多复杂代码完全没必要。我们在这里谈论成千上万行。
这意味着您多次运行的代码从第二次开始运行得更快。另一方面,如果只执行一次EF查询,那么这些初始化将无法获得收益。
在实际应用程序中,您可能会尝试进行一些优化,例如使用Compiled Queries。性能方面,这将对您有所帮助,因为现在您的查询不需要在每次运行时编写和编译,而只需要编译一次。
答案 2 :(得分:6)
在微软工作期间,我写了一篇博文,比较两者的表现。似乎它现在正在迁移过程中,因此您可能需要访问Internet存档才能找到它...
我们一直专注于确保使用EF的性能成本并不可怕,在V1中并不完美,但非常实用。
虽然近10年后EF团队在提高性能,特别是减少不良案例场景方面做得很好,但按照设计,实体框架位于ADO.Net之上。因此,如果您的主要标准是原始性能,那么您应该使用手动优化的SQL来使用ADO.Net。
话虽如此,许多其他优秀的开发人员,并没有制作出最好的SQL;实体框架将它们与编写查询隔离开来,并使用良好实践来产生相当好的查询。
实体框架的主要优点是提供更高级别的抽象来处理数据,将应用程序开发人员与底层数据模型隔离开来。因此,您可以使用EF提高工作效率,编写更少的数据访问代码;您仍然可以微调特定的查询或数据操作,而不会丢失使非性能关键代码更容易编程的抽象,这是任何业务应用程序的最大部分,例如。
答案 3 :(得分:1)
我认为EF在首次执行时性能最差,那为什么我们要使用EF?
为什么EF第二次执行比第一次执行快?
是的。 EF的最重要功能之一是缓存。