【发布时间】:2012-05-12 05:47:04
【问题描述】:
我们正在使用 Fluent NHibernate 1.3.0.727 和 NHibernate 3.3.0.4000 将我们的属性映射到数据库中的列。这是我们的一个 ClassMap 的缩略示例:
public class TankMap : ClassMap<Tank>
{
public TankMap()
{
Id(o => o.Id);
Map(o => o.TankSystem);
}
}
在这种情况下,TankSystem 属性是一个字符串。
在我们的应用程序的某些部分中,有很多计算涉及多次访问映射的属性(例如 TankSystem)。当我们分析应用程序时,简单地访问这些属性会占用大量时间,因为每次访问它们时,都必须通过 NHibernate.Proxy.DefaultLazyInitializer.Intercept 方法。
我们需要尽可能快地进行计算,并希望避免这种代理开销。一种方法是将我们想要的属性(例如 TankSystem)复制到数组中,并在我们想要访问此信息的任何时候使用数组,但这不是一种非常面向对象的方法。
更新:
我们已经尝试使用 Not.LazyLoad 映射我们的属性,例如:
Map(o => o.TankSystem).Not.LazyLoad();
但是,这似乎对该属性是否实际被代理没有任何影响。
有没有什么办法可以避免/减少这种代理开销?
【问题讨论】:
-
NHibernate 3.x 不使用 Castle DynamicProxy。因此,我认为这个问题是错误的
标签: performance nhibernate fluent-nhibernate proxy castle-dynamicproxy