Сравнение SaveChanges и SaveChangesAsync: странные результаты - PullRequest
1 голос
/ 18 апреля 2019

Я написал простой тест, возможно, он неправильный и дает неожиданный (для меня) результат ... вот почему я прошу вас объяснить мне, а еще лучше исправить мой пример.

using System;
using System.Threading.Tasks;

namespace AsyncTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var startDate = DateTime.Now;

            for (int i = 0; i < 10000; i++)
            {
                InsertEntity(i);
                Console.WriteLine($"{i}");
            }

            var endDate = DateTime.Now;

            Console.WriteLine($"Total elapsed time: {(endDate - startDate).TotalMilliseconds}");
        }

        static void InsertEntity(int i)
        {
            using (var context = new TestContext())
            {
                var entity = new Entity
                {
                    Code = $"Code {i}",
                    Name = $"Name {i}",
                    Description = $"Description {i}"
                };
                context.Entities.Add(entity);
                context.SaveChanges();
            }
        }
    }
}

Общее истекшее время: 9585ms

using System;
using System.Threading.Tasks;

namespace AsyncTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var startDate = DateTime.Now;

            for (int i = 0; i < 10000; i++)
            {
                InsertEntity(i).Wait();
                Console.WriteLine($"{i}");
            }

            var endDate = DateTime.Now;

            Console.WriteLine($"Total elapsed time: {(endDate - startDate).TotalMilliseconds}");
        }

        static async Task InsertEntity(int i)
        {
            using (var context = new TestContext())
            {
                var entity = new Entity
                {
                    Code = $"Code {i}",
                    Name = $"Name {i}",
                    Description = $"Description {i}"
                };
                await context.Entities.AddAsync(entity);
                await context.SaveChangesAsync();
            }
        }
    }
}

Общее истекшее время: 13479ms

Я ожидал наоборот, учитывая эту асинхронностьпрограммирование может освободить потоки во время операций ввода-вывода ... это правильно?Так почему же это на самом деле медленнее?

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