NHibernate来自不同项目

时间:2016-10-17 17:53:48

标签: c# wpf postgresql nhibernate fluent-nhibernate

我使用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>();
        };
    }

此外:

  1. 如果我使用ADO.NET获取数据,它甚至可以从我的主WPF应用程序执行2秒。

  2. 我试图通过代码使用NHibernate映射,但它与FluentNHibernate版本具有相同的速度30秒和2秒。

  3. 我查看了PostgreSQL日志,但没有发现任何有趣的内容。

  4. 怎么可能?

0 个答案:

没有答案