我们目前正在使用NHibernate访问我们的数据库。
我们有数据库,它存储一个“配置”。我们有“修订”的概念,这意味着我们的数据库中的每个表都有一个修订,当我们做任何更改(即使是一个小的)时,我们的数据库中的每个字段都会被重复(除了不相同的更改)。
目标是能够轻松地从一个版本切换到另一个版本,并且能够删除一个配置,并且仍然能够从早期或更旧的版本中切换。
这意味着,当我们更改配置时,我们会在数据库中进行大量的写入(其他应用程序也必须读取它)。
这个步骤可能需要很长的时间(5-10分钟,我们有很多表),相比之下,用xml存储它需要10-20秒。
在分析了一段时间之后,我们的印象是NHibernate必须进行大量的反射才能将数据库映射到c#对象(使用我们的hbm.xml文件)。
我的问题:
非常感谢你的帮助。
发布于 2014-03-03 16:30:36
在假设是相关之前。我强烈建议下载(至少作为免费试用版) NHProf,看看NHibernate花了这么长时间的原因。或者其他数据库分析器。
如果我不得不猜测这里所需要的数据库更新的数量,但如果不首先获得一些指标,我就不会猜测性能;)
例如,如果您在一个会话中执行许多小更新,则可能需要在NHibernate中增加批处理大小,这可以在nh配置文件中完成。
<property name="adonet.batch_size">300</property>发布于 2015-01-15 07:35:21
你不能回避反思,但这不是问题。NHibernate使用大量的反射来准备和发出动态代码。生成的代码比静态代码更快,因为msil允许的东西比c#更多。
如果实现反射使用似乎是您的问题,您可以只扩展NHibernate,但编写一个字节代码提供程序。
Personnaly、proxy生成器、usertype和property访问器可以比内置实现更快。
通常,Nhibernate引起的性能问题通常是:
https://stackoverflow.com/questions/22150721
复制相似问题