私は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
私はapp.configがある
- query1.ToList():Y()のようなものですこの時間を減らすことは可能ですか?
ありがとうございます。
私は自分のPCにホストされている仮想マシンにpostgresqlを持っています。私はあなたが私に言ったことをして、2つの異なるシナリオを見つけました。まず、私のPCに。 Npgsql.NpgsqlConnection connection = new Npgsql.NpgsqlConnection( "...")を実行すると、2秒かかります。他は速いです。 2番目のシナリオは、仮想マシンで実行します。 Npgsql.NpgsqlConnection接続=新しいNpgsql.NpgsqlConnection( "...")は高速です。最初のクエリは1.7秒かかり、もう1つのクエリは高速です。何か考えますか? –
この回答を受け入れるつもりです。 Entity Frameworkと本当に関係していると考えてください。ありがとう –
もう1つ追加。この回答を書いて以来、Npgsql 3.2.0(3.1.xはこれを引き起こしませんでした)で新しい起動時間が異常に遅いという報告がいくつか寄せられました。明らかに、Npgsql 3.2.0の新しいパフォーマンスカウンタの使用によりこの問題が発生し、3.2.2で修正されます(https://github.com/npgsql/npgsql/issues/1435を参照)。 –