我々は、Fluent NHibernate 1.3.0.727とNHibernate 3.3.0.4000を使用して、プロパティをデータベースのカラムにマッピングしています。ここに私たちのクラスマップの1の簡略サンプルは次のとおりです。この場合、NHibernateのプロパティ代理オーバーヘッドをどのように減らすことができますか?
public class TankMap : ClassMap<Tank>
{
public TankMap()
{
Id(o => o.Id);
Map(o => o.TankSystem);
}
}
TankSystemプロパティは、文字列です。
私たちのアプリケーションの一部では、マッピングされたプロパティ(TankSystemなど)に何度もアクセスすることを含む多くの計算があります。アプリケーションをプロファイリングするときは、これらのプロパティにアクセスするだけでかなりの時間がかかります。なぜなら、アクセスするたびにNHibernate.Proxy.DefaultLazyInitializer.Interceptメソッドを実行する必要があるからです。
できるだけ早く計算を行う必要があり、このプロキシオーバーヘッドを避けたいと考えています。 1つのアプローチは、必要なプロパティ(たとえばTankSystem)を配列にコピーし、この情報にアクセスするたびに配列を使用することですが、これはオブジェクト指向のアプローチではありません。
更新:
私たちは、例えば、Not.LazyLoadを使用して私たちのプロパティをマッピングしようとしている:
Map(o => o.TankSystem).Not.LazyLoad();
しかし、これは、このプロパティは、実際にプロキシされているかどうかに影響を持っていないようです。
このプロキシオーバーヘッドを避ける/減らすオプションはありますか?
NHibernate 3.xはCastle DynamicProxyを使用していません。そういうわけで、この質問は間違っていると思います。 –