数据访问的性能和可扩展性

时间:2012-01-01 09:38:32

标签: asp.net performance entity-framework ado.net scalability

我看了很多答案,但没有找到满意的答案。 这是问题所在。我需要创建一个Web应用程序。技术将基于Microsoft堆栈(ASP.NET 4,C#,SQL Server 2008)。基础设施将托管在Amazon EC2上。 我需要决定访问数据的最佳方式。

  1. 实体框架
  2. Plane old ADO.NET
  3. 在高峰期,一次可以有大约100,000人访问该网站。要实现这种规模并具有良好的性能,可以使用Entity Framework还是更好地依靠ADO.NET? Entity框架与ADO.NET是否存在性能问题?

    任何提示都会有所帮助。

2 个答案:

答案 0 :(得分:1)

由于您正在构建高流量网站,因此您可能应该使用简单的Ado.net。但Micro-ORM可以作为您的选择。例如,SO使用单个文件ORM dapper dot net。 如果您查看Performce表,您将看到EntityFramework不应该是一个选项。我个人喜欢PetaPoco。

http://code.google.com/p/dapper-dot-net/

http://samsaffron.com/archive/2011/03/30/How+I+learned+to+stop+worrying+and+write+my+own+ORM

 **Method**                                     **Duration**     
 Hand coded (using a SqlDataReader)         47ms 
 Dapper ExecuteMapperQuery<Post>            49ms 
 ServiceStack.OrmLite (QueryById)           50ms 
 PetaPoco                                   52ms    Can be faster 
 BLToolkit                                  80ms 
 SubSonic CodingHorror                      107ms 
 NHibernate SQL                             104ms 
 Linq 2 SQL ExecuteQuery                    181ms 
 Entity framework ExecuteStoreQuery         631ms

答案 1 :(得分:0)

实体框架,LINQ2SQL和其他OR映射器在应用程序服务器端的运行时间损失很小。然而,在大多数现实生活中,罚款低于1%。

与大多数技术(以不同方式做同样的事情)一样,性能影响并不是很大程度上取决于技术,而是取决于您如何实现它们。如果键入EF查询转换为循环数据库的多个SQL查询,则可以使用EF进行灾难性故障。但这些案例很容易被发现并且易于修复。