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

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

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

Я создаю новое соединение, используя «новый SqlConnection», а затем выполняю команду, созданную «новым 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 напрямую?


person Community    schedule 13.04.2016    source источник
comment
Вот обновления: после запуска приложения при первом подключении к базе данных sql localdb .mdf функция sqlConnection.open() занимает около 10-15 секунд. Позже в этом сеансе открытие базы данных занимает около 2 секунд. Я хочу минимизировать эти 10-15 секунд.   -  person    schedule 16.04.2016


Ответы (3)


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

person Oscar    schedule 13.04.2016

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

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

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

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

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

person bh_earth0    schedule 16.05.2019

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

person Community    schedule 19.04.2016