我正在使用带有 mssql db 的 mvc3 nhibernate orm 层开发我的第一个应用程序。
这是我使用 nhibernate 创建的第一个应用程序,除了初始响应时间之外,一切都很好。经过一些调查,我实现了每个 Web 请求的会话,这绝对是一次升级,我的实体在第一次调用后加载速度更快,但我的问题仍然存在。
初始响应时间真的很慢,当我输入 domainname.com 并点击输入 lwaiting 时间大约是。10-15 秒。这不是内容的实际加载时间,在 10-15 秒之后。我的网站开始加载,还有几秒钟。
那个时候会话工厂必须初始化所有需要的“东西”,但我认为它必须是别的东西。这是无法接受的。
我的应用程序在站点内存分配 200 MB 的 winhost 上运行,所以我认为这不是问题。
欢迎任何提示。如果您需要更多详细信息,请询问。
谢谢
更新: 在使用 nhibernate profiler 检查应用程序会话使用情况后,我发现了一些有趣的东西。因为我真的是使用分析器的初学者,所以我认为我发现了昂贵的会话。在一般统计中,67 个实体在 36.571 秒内加载。这个秒值真的很奇怪,因为我要加载 10-max 15 秒。
第二次更新: global.asax
public class MvcApplication : System.Web.HttpApplication{
public static ISessionFactory SessionFactory =
MyDomain.Infrastructure.SessionProvider.CreateSessionFactory();
//My session factory is open in Application_Start() like this
SessionFactory.OpenSession();
}
我正在使用流利的方法来映射我的对象。所以我在域项目中的会话提供者看起来像这样
//This should be used from web app, global.asax.cs calls
public static ISessionFactory CreateSessionFactory()
{
string conStringName = "ConnectionString";
var cfg = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(c => c.FromConnectionStringWithKey(conStringName)))
.Mappings(m => m.FluentMappings.Add<Entity1>())
.Mappings(m => m.FluentMappings.Add<Entity2>())
.Mappings(m => m.FluentMappings.Add<Entity3>())
.ExposeConfiguration(p => p.SetProperty("current_session_context_class", "web"))
.BuildConfiguration();
return cfg.BuildSessionFactory();
}
更新 3 仍然没有解决这个问题
更新 4 和最终 我的问题肯定在 sessionFactory 中。我认为我的配置对象应该被序列化。如果有人可以使用我的代码显示如何使用此处显示的流利的conf来展示如何做到这一点。我很乐意接受他/她的回答。谢谢。