@Anton_habr_2020

Производительность MySQL connector для .NET, обсудим?

Недавно при переводе проекта с .net core 3.1 на 5.0 решил перейти с Pomelo.EntityFrameworkCore.MySql на официальный MySQL коннектор(MySql.Data.MySqlClient) и наткнулся на резкое падение производительности приложения.

Заинтересовался и провел тесты. Разница в скорости вычитки данных составила 10-30 раз в зависимости от условий теста.
Тесты проводил на локальной базе и на простом запросе, чтобы минимизировать задержки со стороны MySQL сервера. Тестировал на Windows и Ubuntu, на .net core 3.1 и .net core 5 - результаты сравнимы.

Вот код теста, он одинаков для обоих библиотек.
List<uint> ids = new List<uint>();
            using (MySqlConnection connection = new MySqlConnection(str))
            {
                connection.Open();
                DateTime now = DateTime.Now;
                using (MySqlCommand cmd = new MySqlCommand("SELECT * FROM Transactions;", connection))
                using (MySqlDataReader reader = cmd.ExecuteReader())
                    while (reader.Read())
                        ids.Add(reader.GetUInt32("ID"));
                Console.WriteLine("Loaded " + ids.Count + " items. App working time = " + (DateTime.Now - now).TotalSeconds + " sec");
            }


Есть идеи как объяснить эту ситуацию?
  • Вопрос задан
  • 254 просмотра
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Сравните connection в обоих тестах что они там по умолчанию создают плюс проверяйте только в релизе. Ну и да официальный более тормознутый и меньше фич в области интеграции с EF
Ответ написан
Комментировать
Вопрос относится в первую очередь к разработчикам на .net!

Тогда теги надо ставить соответствующие.
Недавно при переводе проекта с .net core 3.1 на 5.0 решил перейти с Pomelo.EntityFrameworkCore.MySql на официальный MySQL коннектор(MySql.Data.MySqlClient) и наткнулся на резкое падение производительности приложения.

Так и есть. Оракловый драйвер ужасен.

PS: бенчмарки лучше проводить при помощи BenchmarkDotnet (а не Stopwatch или DateTime) - он умнее и перед замерами прогревает код, чтобы JIT успел его скомпилировать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы