我们使用 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();
但是,这似乎对该属性是否实际被代理没有任何影响。
有没有什么办法可以避免/减少这种代理开销?