Быстрый тест показывает большую разницу, сравнивая ядро ​​EF с ADO.Net - PullRequest
0 голосов
/ 29 октября 2019

Я читаю, что производительность ядра EF улучшена и почти такая же высокая, как у ADO.NET, и решил создать простой тест. Результаты, которые я получил, показывают огромную разницу. ADO.NET был в 10 раз быстрее.

Я публикую здесь код, который использовал для тестирования. Что-то не так с моим тестом? Предпринятые шаги:

Обратный инжиниринг базы данных с использованием Scaffold-DbContext. Получить одну запись из одной таблицы:

using (var db = new TestFECore.Models.AchieveDB_EncryptContext())
{
    var watch = System.Diagnostics.Stopwatch.StartNew();
    var disbursement = db.Disbursement
                         .Where(c => c.CashOutid > 999 && c.CashOutid < 2001)
                         .First();

    Console.WriteLine(disbursement.DisbursementId.ToString()); 

    watch.Stop();
    var elapsedMs = watch.ElapsedMilliseconds;
    Console.WriteLine("Time elapsed:" + elapsedMs.ToString());

    var dis = new TestFECore.Models.Disbursement();
    var ds = new DataService();

    watch = System.Diagnostics.Stopwatch.StartNew();
    dis = ds.GetDisbursements();

    Console.WriteLine("Cashoutid from regular ado.net " + dis.DisbursementId.ToString());
    watch.Stop();

    elapsedMs = watch.ElapsedMilliseconds; 
 }

Вот код GetDisbursements

 public  Models.Disbursement GetDisbursements()
      //   public List<Models.Disbursement> GetDisbursements()
      {

         Models.Disbursement disbursement = new Models.Disbursement();
         using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection("Data Source=*******; etc"))
         {
            string commandString = @" The exact SQL created by the EF ";
            SqlCommand command =
                new SqlCommand(commandString, connection);
            connection.Open();

            SqlDataReader reader = command.ExecuteReader();


            while (reader.Read())
            {

               disbursement.DisbursementId = (int)reader["DisbursementId"];

            }


            reader.Close();

         }
            return disbursement;
      }

Вот результаты:

Core 3.0 Testing!
Querying Disbursments
1498
Time elapsed:2138
Using regular ado.net
Cashoutid from regular ado.net 1498
Time elapsed:144
Press enter to continue...

Где я ошибаюсь в своемсравнение? Спасибо

1 Ответ

0 голосов
/ 29 октября 2019

После замечаний TheGenral «первый вызов dbContext» я добавил запрос в другую таблицу перед сравнением, и теперь я получаю достаточно близкие результаты. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...