2017-02-16 15 views
0

Я новичок в Postgresql. Я пытаюсь использовать Postgresql с сущностью framework6, используя npgsql.Postgresql npgsql первое соединение занимает слишком много времени

У меня уже есть база данных. Я использую опцию «База данных первой кодовой формы».

Проблема в том, что при первом выполнении запроса требуется много времени для его выполнения. Я думаю, что это когда соединение открывается в первый раз.

Я создал этот простой пример с проблемой (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() - 2 мс

вторые времена выполнения TestQuer у() что-то вроде:

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

Мой 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

Это, скорее всего, не имеет ничего общего с PostgreSQL или Npgsql, но, скорее, с запуском Entitt Framework, созданием вашей модели и т. Д. Попытайтесь подключиться к базе данных без EF (т.е. просто создайте NpgsqlConnection и открыв ее), и вы должен видеть, что он работает довольно быстро.

Обычно для приложений EF для отправки пользовательских звонков пользователю необходимо отправить запрос типа сотового типа, чтобы избежать этой значимой задержки.

+0

У меня есть postgresql на виртуальной машине, размещенной на моем компьютере. Я сделал то, что вы мне сказали, и нашел два разных сценария. Во-первых, на моем компьютере. Когда я выполняю Npgsql.NpgsqlConnection connection = new Npgsql.NpgsqlConnection («...»), мне требуется 2 секунды. Другие быстрые. Второй сценарий, выполнение его на виртуальной машине. Соединение Npgsql.NpgsqlConnection = новое Npgsql.NpgsqlConnection («...») выполняется быстро, первый запрос занимает 1.7 сек, а другой запрос выполняется быстро. Есть идеи? –

+0

Идти принять этот ответ. Думайте, что это действительно связано с Entity Framework. Спасибо –

+1

Еще одно дополнение; начиная с написания этого ответа, я получил несколько сообщений об аномально медленных запусках, новых в Npgsql 3.2.0 (3.1.x не вызвало этого). Очевидно, что новое использование счетчика производительности Npgsql 3.2.0 вызывает это, и оно будет исправлено в 3.2.2 (см. Https://github.com/npgsql/npgsql/issues/1435). –