【问题标题】:.Net ORM/Business Object Framework Performance.Net ORM/业务对象框架性能
【发布时间】:2010-12-11 15:14:13
【问题描述】:

目前我正在使用自定义业务对象层(采用外观模式),其中对象的属性从存储过程中加载,并为业务逻辑提供位置。这在尝试将我们的代码库迁移到更分层和更标准化的应用程序模型方面一直运作良好,但感觉这种方法更像是一个进化步骤,而不是一个永久的步骤。

我目前正在考虑转向更正式的框架,这样某些架构决策就不必由我自己决定。过去我曾与 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

【问题讨论】:

  • 听起来您在询问对象关系映射框架(简称 ORM) - 您应该考虑更改问题的标题以指定因为很多人可能不理解您所说的 '对象框架'。
  • 我认为您正在寻找对象关系映射器 (ORM),而不是“.Net 对象框架”。您可能需要相应地更改标题...
  • 感谢我将其更改为 ORM/Business Object Framework 的建议,因为我不反对类似于 CSLA 的东西,它不是一个 ORM。
  • 现在只需要找到真正想谈论性能的人。 ;)

标签: c# .net orm oop frameworks


【解决方案1】:

使用任何 ORM,您都将通过 proc 缓存中的 1 级获得开箱即用的提升。特别是有负载时,如果它已经在那里,它就不会去冥王星(DB)了。大多数 ORM 都有机会注入 L2 out proc 缓存。这些的好处是它们只是插入到 ORM 中。为 NHibernate 检出 NCache。

【讨论】:

  • 如果缓存使用可能,则可以提高。但是例如如果他从数据库中顺序读取数千个非常简单的对象,缓存将无济于事:ORM 中的缓存显着提高了随机读取的性能(实际上,通过简单地减少 ORM 和 RDBMS 之间的闲聊),但对顺序读取却没有(因为根本没有闲聊)。
【解决方案2】:

O/R 映射器的性能在很大程度上取决于您的应用程序的设计方式以及您映射业务对象的方式。例如,您可以通过在循环中延迟加载子对象来轻松降低性能,这样 1000 个对象的 1 次选择变成 1001 次选择(google n+1 选择)。

使用 o/r 映射器的最大性能提升之一在于开发人员的工作效率,这通常比应用程序性能更重要。对于在最新硬件上运行的大多数应用程序,最终用户通常可以接受应用程序性能。无论对问题应用多少 Mountain Dew,开发人员的性能仍然是一个瓶颈。 :-)

【讨论】:

    【解决方案3】:

    http://ormbattle.net - 那里的性能测试看起来几乎正是您想要看到的。

    你必须看具体化测试(获取大量项目的性能正是它所显示的);此外,您可以将 ORM 性能与在普通 ADO.NET 上执行相同操作的近乎理想的 SQL 性能进行比较。

    【讨论】:

    • 太棒了!比我想要的更多的数据。谢谢!
    猜你喜欢
    • 2010-11-20
    • 2011-07-09
    • 2012-08-14
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多