Асинхронные запросы с DB2 и .NET - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь выполнить асинхронные запросы к DB2 под .NET 4.7 в Windows 10 с VS2017, используя последний драйвер DB2 .NET (v11.1, пакет исправлений 3). Я ожидаю некоторого увеличения производительности, но кажется, что асинхронный вариант на самом деле не асинхронный. Я совершенно не прав? Производительность асинхронного и синхронизированного вариантов более или менее идентична. Если я заменю запросы на Task.Delay или другие задачи, асинхронность будет работать лучше.

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using IBM.Data.DB2;
using System.Data;
using System.Reflection;

namespace Db2AsyncTest
{
   public class Program
   {
        static void Main(string[] args)
        {
            //Warm up
            TestSync();
            TestAsync().Wait();
            TestSync();
            Console.ReadKey();
        }

    static async Task TestAsync()
    {
        var dt = DateTime.Now;
        var tasks = new List<Task>();
        for (int i = 0; i < 10; i++)
        {
            tasks.Add(ExecuteAsync());
        }
        await Task.WhenAll(tasks);
        var dt2 = DateTime.Now;
        var timeSpan = dt2 - dt;
        Console.WriteLine("Async Time: " + timeSpan.TotalMilliseconds);

    }

    static async Task ExecuteAsync()
    {
        using (var conn = new DB2Connection(""))
        {
            await conn.OpenAsync();
            var cmd = conn.CreateCommand();
            cmd.CommandText = "SELECT * FROM EMPLOYEE";
            var reader = await cmd.ExecuteReaderAsync();
            var dt = new DataTable();
            dt.Load(reader);
        }
    }


    static void TestSync()
    {
        var dt = DateTime.Now;
        for (int i = 0; i < 10; i++)
        {
            ExecuteSync();
        }
        var dt2 = DateTime.Now;
        var timeSpan = dt2 - dt;
        Console.WriteLine("Sync Time: " + timeSpan.TotalMilliseconds);

    }



    static void ExecuteSync()
    {
        using (var conn = new DB2Connection(""))
        {
            conn.Open();
            var cmd = conn.CreateCommand();
            cmd.CommandText = "SELECT * FROM EMPLOYEE";
            var reader = cmd.ExecuteReader();
            var dt = new DataTable();
            dt.Load(reader);
        }
    }

}

}

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