Слишком медленное открытое соединение с SQL Server при первом запуске приложения - PullRequest
1 голос
/ 05 февраля 2011

В своем настольном приложении WPF4 я использую соединение с SQL Server 2008 R2 через ADO.NET Entity Data Model (edmx) и обратил внимание, что при первом запуске приложения (холодный запуск) это занимает слишком много временивремя (около 10 секунд), пока приложение не установит (не откроет) соединение с БД и сможет выполнить базовый LINQ-запрос (без объединения, таблица действительно мала) и покажет результат в DataGrid control.

SQL Server 2008 R2установлен на моем локальном ПК, поэтому нет проблем с загрузкой сети.

Способ создания соединения SQL (во внешнем потоке):

    public static DBEntities dbContext = new DBEntities();
    dbContext.Connection.Open();

Конфигурация соединения:

    <connectionStrings>
        <add name="DBEntities" connectionString="metadata=res://*/DBModel.csdl|res://*/DBModel.ssdl|res://*/DBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQLEXPRESS;Initial Catalog=DB;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
    </connectionStrings>

Мой вопрос: нормально ли для небольшого базового WPF-приложения (исполняемый файл размером 300 Кбайт, без тяжелых вычислений) устанавливать соединение с локальным SQL Server примерно за 10-13 секунд?

Полагаю, чтомое оборудование не такое современное, но, в любом случае, 10 секунд ...

Не могли бы вы предложить мне несколько решений для повышения производительности первого соединения с SQL Server?

PS После долгого первого соединения программа работает нормально и проблем с производительностью нет.

Ответы [ 2 ]

2 голосов
/ 06 февраля 2011

Я знаю об этом поведении «плохой производительности» в многоуровневом приложении поверх WCF с SQL Server.Хотя 10-13 сек действительно раздражает и довольно экстремально.Я выбрасываю соединение с сервисом WCF и, следовательно, затем с соединением SQL Server в фиктивный вызов сервиса WCF с запросом выбора SQL Server (с EF) на заставку.

Таким образом, конец-user не испытывает эту первую задержку при запуске.когда конечный пользователь действительно хочет просмотреть / получить данные, приложение реагирует.

Хотя это на самом деле не «решает вашу проблему», это хороший обходной путь / прикрытие;)

1 голос
/ 05 февраля 2011

Это очень сильно зависит от сложности модели; если это достаточно сложно, генерация представлений для него может вызвать некоторые задержки. Вы можете предварительно сгенерировать представления во время сборки, как описано здесь .

...