Веб-сайт C # / ASP.NET с использованием медленного запроса к базе данных SQL Server CE

1

Основная проблема заключается в том, что простой выбор из моей базы данных SQL Server CE имеет типичное время ожидания 17 секунд для первого запроса и ~ 5 секунд для каждого последующего запроса.

После того, как сайт простаивает пару минут, возвращается 17-секундная задержка. Я предполагаю, что задержка заключается в установлении соединений, кешировании и т.д., Но я чувствую, что в нашей локальной сети это смехотворное ожидание и будет только ухудшаться для внешних пользователей.

Сайт является веб-сайтом aС#/ASP.NET, который использует базу данных SQL Server Compact (v4.0.8876.1). Это развертывается на сервере IIS8. Сайт предназначен для расчета значений с пользовательского ввода с использованием коэффициентов для разных моделей, которые хранятся в базе данных.

Что я делаю неправильно, чтобы быть такой массовой задержкой во время соединения/запросов?

Строка подключения:

<add name="DatabaseConnection" 
     connectionString="Data Source=|DataDirectory|\Database.sdf" 
     providerName="System.Data.SqlServerCe.4.0"/>

Запрос:

string connstr = ConfigurationManager.ConnectionStrings["DatabaseConnection"].ConnectionString;

using (SqlCeConnection conn = new SqlCeConnection(connstr))
{
    string queryString = @"Select id, description, imagePath
                           from ConservationModels
                           where model = @modelName";

    SqlCeCommand command = new SqlCeCommand(queryString, conn);
    command.Parameters.AddWithValue("@modelName", modelName);

    try
    {
        conn.Open();

        SqlCeDataReader reader = command.ExecuteReader();

        while (reader.Read())
        {
            modelID = (int)reader[0];
            description = (string)reader[1];
            imagePath = (string)reader[2];
        }

        reader.Close();
     }
     catch (Exception ex)
     {
        throw;
     }
 }

Извиняюсь за любую недостающую информацию, и я ценю любые предложения. Если есть лучший способ достичь цели для веб-сайта, я все уши.

  • 1
    Не предполагайте, измерьте. Сколько записей в таблице? Индексируется ли поле Модель?
  • 0
    74 записи и нет это не проиндексировано. Теперь я понимаю, что это должно произойти, так как идентификатор является первичным ключом. Я скоро обновлюсь, как только выясню это. Спасибо за комментарий.
Показать ещё 7 комментариев
Теги:
sql-server-ce
iis-8

2 ответа

0
Лучший ответ

Следуя совету MatteoSp, я удалил компоненты SQL Server CE с сайта и создал базу данных SQL Server Express для ее замены. Хотя время компиляции на сайте, по-видимому, увеличилось по некоторым причинам, это решило мою проблему для медленных запросов/подключения.

Спасибо за помощь.

1

Это может быть запоздалым, но я недавно узнал (трудный путь), что если вы используете SQL Server CE с ASP.NET на OWIN, размещенном в IIS, IIS будет перекомпилировать или построить новый домен приложения по каждому запросу. Не знаю, почему это происходит, но время, которое вы видите, скорее всего будет ASP.NET для восстановления приложения.

В моем приложении изначально используется SQL Server Express с Entity Framework, и все работает нормально - типичный медленный ответ на первый запрос, поскольку Entity Framework компилирует схему базы данных, а затем быстро молниеносно. Статические переменные в приложении переносятся на несколько запросов.

Я перешел из SQL Server Express в SQL Server CE, а затем внезапно увидел, что Entity Framework перекомпилирует схему для каждого запроса. Это означает, что каждый запрос идет медленно.

Кроме того, любые статические переменные, которые я сохраняю в приложении, сбрасываются для каждого запроса - в соответствии с созданным новым доменом приложения.

Перемещение всего стека без изменений на самостоятельный хостинг на OWIN, и внезапно это снова становится нормальным - первый запрос медленный, а последующие - молниеносно.

Это доказывает, что ASP.NET на OWIN в IIS с SQL Server CE делает что-то странное, не повторно используя существующие потоки и постоянно строя новые домены приложений.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню