我使用PostgreSQL 9.5.3(在Debian服务器上),NHibernate 4.0.4,FluentNHibernate 2.0.3,Npgsql 3.1.8。 Caliburn.Micro 3.0.1。所有项目都针对.NET Framework 4.5.1,在Windows 7上执行。
我试图理解为什么我的项目中的查询太慢了。我发现了奇怪的行为。
此代码包含在TestDll库中。如果我从我的主WPF应用程序调用它,它执行30秒。如果我从其他项目运行它(我添加了测试ConsoleApplication并测试WpfApplication),它执行了2秒。
public static string TestGetEntities() {
string conn = "...";
ISessionFactory factory = Fluently.Configure()
.Database(PostgreSQLConfiguration
.PostgreSQL82
.ConnectionString(conn))
.Mappings(ConfigMappings())
.BuildSessionFactory();
Stopwatch sw = new Stopwatch();
sw.Start();
List<Deal> deals;
using (ISession session = factory.OpenSession()) {
deals = session.Query<Deal>()
.Where(d => d.Time >= new DateTime(2016, 8, 1) && d.Time < new DateTime(2016, 8, 2))
.OrderBy(d => d.Time)
.ToList();
}
sw.Stop();
return sw.Elapsed + " " + deals.Count;
}
public static Action<MappingConfiguration> ConfigMappings() {
return m => {
m.FluentMappings.Add<DealMap>();
};
}
此外:
如果我使用ADO.NET获取数据,它甚至可以从我的主WPF应用程序执行2秒。
我试图通过代码使用NHibernate映射,但它与FluentNHibernate版本具有相同的速度30秒和2秒。
我查看了PostgreSQL日志,但没有发现任何有趣的内容。
怎么可能?