2017-02-16 13 views
0

私はPostgreSQLを初めて使用しています。私は、npgsqlを使用して、エンティティframework6でPostgreSQLを使用するようにしています。PostgreSQL npgsqlの最初の接続に時間がかかりすぎます

私は既にデータベースを持っています。私は "コードファーストフォームデータベース"オプションを使用しています。

問題は、初めてクエリを実行すると、実行に時間がかかります。私は接続が初めて開かれたときだと思います。

は、私が問題にこの簡単な例を作成した(TestJSONBはDbContextです):TestQuery()の

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

最初の実行時間のようなものです:

  • query1.ToListを() - 2348ms
  • query2.ToList() - TestQuerの2msの

第2実行時間

<?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> 

されています: - - 19ms

  • query2.ToList()2msの
  • 私はapp.configがある

    • query1.ToList():Y()のようなものですこの時間を減らすことは可能ですか?

      ありがとうございます。

    答えて

    1

    これはPostgreSQLやNpgsqlとはまったく関係がありませんが、Entitt Framework自体が起動してモデルを構築しているなどの理由で、EFなしでデータベースに接続しようとします(つまり、NpgsqlConnectionを作成して開きます)それがかなり速く走るのを見なければならない。

    EFアプリケーションでは、ユーザーコールを実際に処理する前に、この重要な初回の遅延を避けるために、一種の疑似ウォームアップクエリーを送信するのが一般的です。

    +0

    私は自分のPCにホストされている仮想マシンにpostgresqlを持っています。私はあなたが私に言ったことをして、2つの異なるシナリオを見つけました。まず、私のPCに。 Npgsql.NpgsqlConnection connection = new Npgsql.NpgsqlConnection( "...")を実行すると、2秒かかります。他は速いです。 2番目のシナリオは、仮想マシンで実行します。 Npgsql.NpgsqlConnection接続=新しいNpgsql.NpgsqlConnection( "...")は高速です。最初のクエリは1.7秒かかり、もう1つのクエリは高速です。何か考えますか? –

    +0

    この回答を受け入れるつもりです。 Entity Frameworkと本当に関係していると考えてください。ありがとう –

    +1

    もう1つ追加。この回答を書いて以来、Npgsql 3.2.0(3.1.xはこれを引き起こしませんでした)で新しい起動時間が異常に遅いという報告がいくつか寄せられました。明らかに、Npgsql 3.2.0の新しいパフォーマンスカウンタの使用によりこの問題が発生し、3.2.2で修正されます(https://github.com/npgsql/npgsql/issues/1435を参照)。 –

    関連する問題