.Net ORM/Business Object Framework性能

4

目前我正在使用自定义业务对象层(采用外观模式),其中对象的属性从存储过程中加载,并提供业务逻辑的位置。这在试图将我们的代码库移动到更分层和标准化的应用程序模型方面效果很好,但我认为这种方法更多地是一种演进而不是永久性的。

我目前正在研究转向更正式的框架,以便某些架构决策不必成为我自己的决策。过去我曾经使用过 CSLA 和 Linq to SQL,虽然我喜欢 CLSA 中许多设计决策,但我发现它有点臃肿,而 Linq to SQL 可能没有我想要的性能。我对 NHibernate 的普及和 Linq to Entity 的推动很感兴趣,但是性能是一个关键问题,因为有时需要一次获取大量记录 (>15K) (请勿就此争论原因),因此就性能而言,哪种选择看起来最适合采用正式的 .Net 对象框架?

注意:这将主要用于 Winform 和 WPF 应用程序。

重复: https://stackoverflow.com/questions/146087/best-performing-orm-for-net


1
听起来你在问关于对象关系映射框架(简称ORM)的问题 - 你应该考虑修改你的问题标题以明确指出这一点,因为很多人可能不理解你所说的“对象框架”的含义。 - Jeff Sternal
1
我认为你正在寻找一个对象关系映射器(ORM),而不是“.Net对象框架”。你可能需要相应地更改标题... - Romain Verdier
谢谢您的建议,我将其更改为ORM / Business Object Framework,因为我不反对类似于CSLA但不完全是ORM的东西。 - jwarzech
1
现在只需要找到那些真正想要谈论性能的人就可以了。 ;) - Jeff Sternal
3个回答

8
http://ormbattle.net - 那里的性能测试似乎正是您想要查看的内容。 您必须关注物化测试(获取大量项目的性能正是它所显示的); 此外,您可以将ORM性能与使用纯ADO.NET执行相同操作的近乎理想的SQL性能进行比较。

2
太好了!比我想要的数据还多。谢谢! - jwarzech

1

无论使用任何ORM,您都将通过过程级别1缓存获得提升。特别是在大量加载时,如果已经存在,则不需要访问Pluto(DB)。大多数ORM都有机会注入L2外部进程缓存。这些东西的好处在于它们可以直接插入ORM中。请查看NCache以获取NHibernate。


如果可以使用缓存,可能会提高性能。但是如果例如从数据库顺序读取数千个非常简单的对象,则缓存帮助不大:ORM中的缓存极大地增加了随机读取的性能(事实上,仅通过减少ORM与RDBMS之间的通信次数),但并不适用于顺序读取(因为根本没有通信)。 - Alex Yakunin

1

O/R映射器的性能将在很大程度上取决于您的应用程序设计以及如何映射业务对象。例如,您可以通过在循环中惰性加载子对象,使得1000个对象的1次选择变成1001次选择(谷歌n+1选择),从而轻松地破坏性能。

使用O/R映射器最大的性能提升之一是开发人员的生产力,这通常比应用程序性能更重要。对于大多数运行在最新硬件上的应用程序,应用程序性能通常对最终用户来说是可以接受的。无论如何,开发人员的性能仍然是一个瓶颈,无论问题有多少Mountain Dew都无济于事。 :-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接