我正在开发一个使用 Asp .Net MVC 和 NHibernate 作为 ORM 工具的网站。我只是使用一些原则实现了一些模式。它们是 IoC、Service-Repository 和 UoW。
我在缓存方面使用了 NHibernate 的几乎所有功能,如下所示
- 延迟加载
- 二级缓存
- 查询缓存
- 实体缓存
到目前为止一切都很好,我可以在 1 秒内加载整个网站,总共几乎 7.5 MB 大小(主要是来自 Azure 存储的图像),而不需要具有上述基础结构的 Asp .Net MVC 的输出缓存,但是当我加载时会发生此操作第二次访问该网站。
最大的问题是 NHibernate SessionFactory 在项目第一次加载时增加了近 15 秒的正常运行时间,这是不可接受的。
我有 25 个实体,所以它们的映射实际上是什么,为什么第一次需要这么长时间?
这是我对 Nhibernate 的配置
public static ISessionFactory GetSessionFactory()
{
return Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2012
.Raw("connection.isolation", "ReadCommitted")
.ConnectionString("connectionString")
.Mappings(gX => gX.FluentMappings.AddFromAssemblyOf<MyEntity>())
.Cache(gX => gX.ProviderClass<SysCacheProvider>()
.UseSecondLevelCache()
.UseQueryCache())
.BuildSessionFactory();
}
顺便说一句,我对 SessionFactory 的创建过程没有任何问题。唯一的问题是我的项目第一次的正常运行时间。我刚刚解决了许多关于缓存策略的问题,但无法弄清楚 SessionFactory。
有什么想法或建议吗?谢谢