postgresql npgsql第一次连接需要太长时间

时间:2017-02-16 16:15:47

标签: c# postgresql entity-framework-6 npgsql

我是Postgresql的新手。我想使用npgsql将postgresql与实体framework6一起使用。

我已经有了一个数据库。我正在使用" Code First表格数据库"选项。

问题是第一次执行查询时,执行它需要很多时间。我认为这是第一次打开连接的时候。

我用问题创建了这个简单的例子(TestJSONB是DbContext):

class Program
{
    static void Main(string[] args)
    {
        TestQuery();
        TestQuery();
    }

    private static void TestQuery()
    {
        using (DALJSONB.TestJSONB dataModel = new DALJSONB.TestJSONB())
        {
            var query1 =
                dataModel.Database.SqlQuery<int>(
                    @"

                    SELECT 1;
                ");

            query1.ToList();

            var query2 =
                dataModel.Database.SqlQuery<int>(
                    @"

                    SELECT 1;
                ");

            query2.ToList();
        }
    }
 }

TestQuery()的第一个执行时间类似于:

  • query1.ToList() - 2348ms
  • query2.ToList() - 2ms

TestQuery()的第二个执行时间类似于:

  • query1.ToList() - 19ms
  • query2.ToList() - 2ms

我的app.config是:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </configSections>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
    <connectionStrings>
        <add name="TestJSONB" connectionString="Host=x.x.x.x;Username=x;Password=x;Persist Security Info=True;Database=TestJSONB" providerName="Npgsql" />
    </connectionStrings>
    <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
        <providers>
            <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
            <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" />
        </providers>
    </entityFramework>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Npgsql" publicKeyToken="5d8b90d52f46fda7" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-3.2.1.0" newVersion="3.2.1.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

是否可以缩短这段时间?

提前致谢。

1 个答案:

答案 0 :(得分:1)

这很可能与PostgreSQL或Npgsql无关,而是与Entitt Framework本身启动,构建模型等尝试连接到没有EF的数据库(即只创建一个NpgsqlConnection并打开它),你应该看它运行得很快。

EF应用程序在实际服务用户呼叫之前发送一种虚拟预热查询是很常见的,正是为了避免这种重大的首次延迟。