我最终决定使用Entity Framework,因为它在所有ORM中具有最佳性能。但在开始阅读和编写代码之前,我想知道是否有任何高访问量的网站使用ORM。
我最终决定使用Entity Framework,因为它在所有ORM中具有最佳性能。但在开始阅读和编写代码之前,我想知道是否有任何高访问量的网站使用ORM。
目前,EF的发布版本,即.NET 3.5中的v1.0性能十分糟糕。一年前它首次发布时,我进行了广泛的测试,并与微软进行了多次长时间的邮件讨论。EF当前的效率有很大的提升空间,在许多情况下,它生成的SQL查询语句非常糟糕,会严重影响性能。
在.NET 4.0中的Entity Framework v4.0要好得多。它们解决了EF v1.0所困扰的大部分甚至全部的不良SQL生成问题(包括我在一年前提出的问题)。EF v4.0是否具有最佳性能还有待观察。它比LINQ to SQL更复杂,因为它提供了更大的灵活性。由于发行版本尚未推出,因此无法确定EF v4.0是否是最快的。
对于这个问题的客观答案需要对主要的ORM供应商进行客观、公正的比较,如EF、LINQ to SQL、nHibernate(最好带有LINQ提供程序)、LLBLGen,以及一些新近加入的ORM供应商,如Telerik的ORM、Subsonic等。
至于使用ORM的大规模高容量生产系统,我建议看看StackOverflow.com本身,它使用的是LINQ to SQL。SO已成为互联网上最顶尖的程序员社区之一,绝对具有高容量性能。至于其他网站,我不能确定。大多数主要Web应用程序的内部实现细节通常是一个谜。我所知道的大多数ORM使用都是用于内部企业系统,如金融系统、医疗保健等。对象数据库也用于同类型的系统,但使用较少。我建议搜索ORM的使用和高容量Web站点。
需要注意的一点是,确保您找到的评测是最新的。在过去的两年里,ORM领域发生了很多变化。性能、效率、功能、动态SQL的RDBMS调整能力等方面都有了显著改善,自ORM十年前首次创建以来。
我知道在某个播客中,Jeff提到stackoverflow使用Linq-to-SQL。
虽然没有直接回答哪个ORM更快,正如Ayende(NHibernate作者)所指出的那样,很容易做错或者至少会使你想要的方向倾斜,但是有一些应用程序正在使用ORM作为它们的一部分。
Twitter(曾经?)使用Ruby on Rails(RoR),RoR使用ORM。37 signal的人们在他们的应用程序中也使用了RoR……我知道这些不是.Net,但正如kuoson所提到的,L2S被SO采用,还有很多人像Jeffrey Palermo和Headspring一样使用NHibernate。我不会惊讶地发现许多最近开发的Web应用程序正在使用ORM。
即使ORM会影响性能,但大多数ORM允许在必要时自定义使用的SQL。大多数建议使用ORM,然后在出现瓶颈时进行修复。此外,一个好的ORM为您解决了很多问题,因此编写自己的数据访问层(DAL)变得更加困难。