我正在将NHibernate用于ORM,并将许多实体的加载合并为一个大查询.
我实际上正在加载一个单词字典,大约500K条目,每个单词与其他单词相关.在后台运行加载过程在我们的应用程序中可能非常棘手,因为我们必须手动加载未按时加载的条目,因为任何时候都可以询问任何单词.我们唯一的要求是尽可能快地加载所有数据.我也尝试过使用无状态会话,但是有一个例外,即无状态会话无法获取集合(出于某种原因,可能与无状态会话没有缓存的事实有关吗?)
问题是虽然SQLServer中的查询时间不超过25秒,但ICriteria.List()需要3分钟以上.
我使用NHProf来描述加载过程,并发现实体的创建是一项代价高昂的事情,它占用了NHibernate的大部分加载时间.
有什么办法可以减少这种延迟吗?内存分配是昂贵的,还是数据的"填充"?
谢谢!
分析创建过程(例如使用 VS 性能分析器)应该可以准确地告诉您什么是成本高昂的操作。如果您已经尝试过延迟加载调整,那么我认为唯一好的解决方案是封装返回的列表,以便能够在几次迭代中分页返回较小的块。我不确定 NHibernate 是否像 JPA 一样支持惰性结果列表(即在需要时才从数据读取器加载实体)。
| 归档时间: |
|
| 查看次数: |
1066 次 |
| 最近记录: |