【发布时间】:2011-03-03 01:36:27
【问题描述】:
我们的应用最初是使用 NHibernate 构建的,并且考虑到了批处理的局限性。然而,随着时间的推移,它已经转变为数据处理器,我们观察到性能显着下降。
会话最终不得不维护大约 1000 个或更多对象,我们的分析显示,自动刷新和脏检查是这里最大的问题。我们尝试关闭自动刷新并在保存/更新操作中自行管理它,但这会导致批量保存/更新的灾难性性能。 我们现在正在考虑从会话中逐出不需要的对象的选项。
- 我遇到了二级缓存驱逐方法 (
sessionFactory.Evict(typeof(Cat));),它允许我们按类型驱逐,但我们不使用二级缓存。我仍然可以使用此方法从一级缓存中逐出对象吗? - 我还读到了一种获取对象的模式,将它们从会话中逐出,然后在需要时通过调用它们的 Update() 将它们与会话重新关联。这是一个推荐和接受的模式,因为我还读到 NH3 已经为此设置了一堵墙? (我们还没有升级到NH3,我们仍然可以使用它)
虽然我们意识到我们没有以最佳方式使用 NHibernate,但我们只是希望以某种方式改善当前情况。非常感谢您对上述问题的回答和任何其他建议/建议。谢谢。
更新
在查看了 NH 文档和代码后,我意识到 1 可能是不可能的。我仍在寻找有关使用 Evict() 的一些指示或技巧。我能够大幅减少会话中的对象数量。但是仍然不知道在更新或删除被驱逐的对象时是否需要付出代价。提前感谢您的帮助。
【问题讨论】: