Основная проблема заключается в том, что простой выбор из моей базы данных 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;
}
}
Извиняюсь за любую недостающую информацию, и я ценю любые предложения. Если есть лучший способ достичь цели для веб-сайта, я все уши.
Следуя совету MatteoSp, я удалил компоненты SQL Server CE с сайта и создал базу данных SQL Server Express для ее замены. Хотя время компиляции на сайте, по-видимому, увеличилось по некоторым причинам, это решило мою проблему для медленных запросов/подключения.
Спасибо за помощь.
Это может быть запоздалым, но я недавно узнал (трудный путь), что если вы используете 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 делает что-то странное, не повторно используя существующие потоки и постоянно строя новые домены приложений.