Низкая производительность приложения C# Sql LocalDB

Я совершенно новые приложения SQL / базы данных и пробую простое приложение управления контактами с использованием Visual Studio 2015 C#. Я использую SQL Express LocalDB. Я читал в Google, что он предназначен для целей разработки, но Microsoft также упоминает, что он может быть использован для производственных целей.

Моя проблема в том, что, когда я испытываю приложение из своей системы разработки, приложение загружается в первый раз за несколько секунд, но после этого каждый запрос выполняется быстро. Когда я пробовал это на одной из моих систем друзей, каждый раз, когда я пытаюсь использовать любой запрос, уходит время. База данных всего с 20-30 записями.

Я создаю новое соединение, используя 'new SqlConnection', а затем выполняю команду, созданную 'new SqlCommand', и после выполнения запроса я закрываю соединение.

Вот фрагмент кода из моего приложения

SqlConnection sqlConnection = new SqlConnection(@"Data Source = (LocalDB)\MSSQLLocalDB; AttachDbFilename = ""C:\ContactsDB.mdf""; Integrated Security = True; Connect Timeout = 30";);
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.Connection = sqlConnection;

sqlCmd.CommandText = "SELECT Id, first_name, last_name from ContactsMaster ORDER BY first_name";
sqlConnection.Open();
SqlDataReader reader = sqlCmd.ExecuteReader();
try
{
    while (reader.Read())
    {
        ListViewItem lvi = new ListViewItem(reader["first_name"]);
        listViewItems.Add(lvi);
        lvi.SubItems.Add(reader[0].ToString());
    }
}
finally
{
    reader.Close();
}
sqlConnection.Close();

Q. Должен ли я держать соединение открытым все время, пока приложение работает? Я не думаю, что это должно быть предложено. Как будто приложение вылетает, база данных может испортиться.

Один из фонов, на котором говорилось, что LocalDB закрывает соединение каждые новые миллисекунды. Так должен ли я пинговать базу данных каждые несколько миллисекунд? Или я не должен использовать localdb в производстве вообще?

Я хочу сделать приложение таким, чтобы требования были очень низкими, учитывая требования к базе данных. Как LocalDB установка действительно без проблем.

Я не использовал SQL Server Express, а установка Express также проста, как LocalDB, и могу ли я использовать строку подключения, например LocalDB, в Express, предоставляя имя файла.mdf напрямую?

2 ответа

Решение

Есть много вещей, которые нужно учитывать для производительности ddbb, это не простой вопрос. Для такого небольшого количества записей не должно быть проблем с производительностью. Попробуйте сохранить файлы ddbb на другом диске, отличном от диска ОС, и, что еще лучше, разместите файл данных и файл журнала на разных дисках. По вашему вопросу, соединения должны быть всегда закрыты и правильно расположены в блоке finally или внутри блока использования. Sql Express очень прост в установке, а также использует строку подключения, что было самым большим отличием, что его можно использовать в сети.

localdb имеет автоматическое отключение. по умолчанию 5 мин. Вы можете установить его на более высокое значение (то есть: 12 часов). макс 65535 мин.

см.: Как предотвратить автоматическое отключение SQL Server LocalDB?

Также автоотключение sqlexpress - 1 час, если я не ошибаюсь.

симптомы на моем компьютере:

Первое открытие замедляется на 10- 30 секунд. если я открою приложение сразу после того, как оно будет ниже 1 секунды. если я подожду некоторое время, то снова медленно

Наконец, перешел на SQLite, и это намного быстрее по сравнению с SQLLocalDB.

Другие вопросы по тегам