Postgresql npgsql 第一次连接耗时太长

Postgresql npgsql first connection takes too long

我是 Postgresql 新手。我正在尝试使用 Postgresql 和实体框架 6,使用 npgsql。

我已经有一个数据库。我正在使用 "Code First form database" 选项。

问题是第一次执行查询时,我花了很多时间来执行它。我想那是第一次打开连接的时候。

我创建了这个带有问题的简单示例(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() 的第一次执行时间类似于:

TestQuery() 的第二次执行时间如下:

我的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>

这次可以减少吗?

提前致谢。

这很可能与 PostgreSQL 或 Npgsql 无关,而是与 Entitt Framework 本身启动、构建模型等有关。尝试在没有 EF 的情况下连接到您的数据库(即仅创建 NpgsqlConnection 并打开它)和您应该会看到它运行得非常快。

EF 应用程序通常会在实际为用户调用提供服务之前发送某种虚拟 warm-up 查询,正是为了避免这种显着的 first-time 延迟。