首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有反射的NHibernate?

没有反射的NHibernate?
EN

Stack Overflow用户
提问于 2014-03-03 15:30:21
回答 2查看 228关注 0票数 1

我们目前正在使用NHibernate访问我们的数据库。

我们有数据库,它存储一个“配置”。我们有“修订”的概念,这意味着我们的数据库中的每个表都有一个修订,当我们做任何更改(即使是一个小的)时,我们的数据库中的每个字段都会被重复(除了不相同的更改)。

目标是能够轻松地从一个版本切换到另一个版本,并且能够删除一个配置,并且仍然能够从早期或更旧的版本中切换。

这意味着,当我们更改配置时,我们会在数据库中进行大量的写入(其他应用程序也必须读取它)。

这个步骤可能需要很长的时间(5-10分钟,我们有很多表),相比之下,用xml存储它需要10-20秒。

在分析了一段时间之后,我们的印象是NHibernate必须进行大量的反射才能将数据库映射到c#对象(使用我们的hbm.xml文件)。

我的问题:

  1. NHibernate如何通过反射在每个对象中读取/写入属性,对吗?
  2. 它是在每次写入时进行反射,还是有一些优化(缓存、.?)
  3. 是否有可能避免这种“反思”?比如在构建时创建/编译一些类(就像使用实体框架一样)?
  4. 如果我有一个可以工作的NHibernate模型,我可以在不改变数据库的情况下“调优”数据库访问吗?

非常感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-03 16:30:36

在假设是相关之前。我强烈建议下载(至少作为免费试用版) NHProf,看看NHibernate花了这么长时间的原因。或者其他数据库分析器。

如果我不得不猜测这里所需要的数据库更新的数量,但如果不首先获得一些指标,我就不会猜测性能;)

例如,如果您在一个会话中执行许多小更新,则可能需要在NHibernate中增加批处理大小,这可以在nh配置文件中完成。

代码语言:javascript
复制
<property name="adonet.batch_size">300</property>
票数 0
EN

Stack Overflow用户

发布于 2015-01-15 07:35:21

你不能回避反思,但这不是问题。NHibernate使用大量的反射来准备和发出动态代码。生成的代码比静态代码更快,因为msil允许的东西比c#更多。

如果实现反射使用似乎是您的问题,您可以只扩展NHibernate,但编写一个字节代码提供程序。

Personnaly、proxy生成器、usertype和property访问器可以比内置实现更快。

通常,Nhibernate引起的性能问题通常是:

  • 缺失抓取
  • 导致不必要更新的精确数据
  • 映射错误(结构或简单的数据类型)
  • 糟糕的数据库/数据表配置
  • 错误提交策略(例如刷新模式)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22150721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档