阅读大包时NHibernate很慢

时间:2011-07-11 08:52:13

标签: performance nhibernate

我遇到性能问题,其中聚合有一个包含大量实体(1000+)的包。通常它最多只包含50个实体,但有时甚至更多。

使用NHibernate探查器我看到从数据库中获取此包的1123条记录的持续时间是18毫秒,但需要NHibernate 1079毫秒来处理它。这里的问题是所有这1123条记录都有一两条额外的记录。我使用fetch =“subselect”获取这些并获取这些附加记录需要16ms才能从数据库中获取并且需要2527ms由NHibernate处理。所以这个动作单独需要3.5秒,这太贵了。

我读到这是因为更新第一级缓存是问题,因为在加载大量实体​​时性能变慢。但是什么是很多? NHibernate Profiler说我有1145个实体由31个查询加载(在我的情况下是绝对最小值)。这个加载的实体数量对我来说似乎不是很多。

在当前项目中,我们使用的是NHibernate v3.1.0.4000

1 个答案:

答案 0 :(得分:2)

我同意,1000个实体不是太多。你确定在一个构造函数或属性设置器中没有使用时间吗?您可以在加载时停止调试器,以便在花费时间的情况下随机采样。

还要确保使用反射优化器(我认为默认情况下它已打开)。

我假设您测量查询本身的时间。如果你衡量整个交易,它肯定会花时间来刷新会话。将FlushMode设置为Never(仅当会话中没有任何更改要存储时)或使用StatelessSession时,请避免刷新。

一个疯狂的猜测:删除批量大小设置甚至可以使它更快,因为它不需要将实体分配给相应的集合。

相关问题