AddDbContextPool - увеличить производительность - PullRequest
0 голосов
/ 15 февраля 2019

Я использовал «AddDbContextPool» для консольного приложения dotnetcore 2.2, и похоже, что он создает нужное количество сессий в БД, но, похоже, не использует их.Вот мой кодДолжен ли я использовать один и тот же контекст через всю консоль или создавать новый при каждом вызове?

public class Startup
{

    private static IConfiguration _iconfiguration;
    static string appsettingsFile = @"appsettings.json";


    public void ConfigureServices(IServiceCollection services)
    {

        Console.WriteLine("Configuring Services");

        var builder = new ConfigurationBuilder().AddJsonFile(appsettingsFile);
        _iconfiguration = builder.Build();

        services.AddDbContextPool<MyDBContext>(c => c.UseSqlServer(_iconfiguration.GetSection("DBConnectionString").Value));


    }

}


class Program
{


    public static IServiceProvider _serviceProvider = null;

    static async Task Main(string[] args)
    {

        var serviceCollection = new ServiceCollection();
        var su = new Startup();
        su.ConfigureServices(serviceCollection);
        _serviceProvider = serviceCollection.BuildServiceProvider();


        var t = new Test(_serviceProvider);

        var t1 = t.List();
        var t2 = t.List();
        var t3 = t.List();

        await t1;
        await t2;
        await t3;

    }


}

class Test 
{

    private IServiceProvider _serviceProvider = null;

    public Test(IServiceProvider serviceProvider)
    {
        _serviceProvider = serviceProvider;
    }


    public async Task<List<test_list>> List()
    {

        using (var serviceScope = _serviceProvider.CreateScope())
        {
            using (var context = serviceScope.ServiceProvider.GetService<MyDBContext>())
            {
                return await context.test_list.ToListAsync<test_list>();
            }
        }

    }


}

Следует ли повторно использовать область и контекст в приложении, чтобы повысить его производительность?Я хочу, чтобы открыть 3 подключения к БД одновременно против 1 за один раз.

РЕДАКТИРОВАТЬ:

public class Startup
{

    private static IConfiguration _iconfiguration;
    static string appsettingsFile = @"appsettings.json";


    public void ConfigureServices(IServiceCollection services)
    {

        Console.WriteLine("Configuring Services");

        var builder = new ConfigurationBuilder().AddJsonFile(appsettingsFile);
        _iconfiguration = builder.Build();

        services.AddDbContextPool<MyDBContext>(c => c.UseSqlServer(_iconfiguration.GetSection("DBConnectionString").Value));


    }

}


class Program
{


    public static IServiceProvider _serviceProvider = null;

    static async Task Main(string[] args)
    {

        var serviceCollection = new ServiceCollection();
        var su = new Startup();
        su.ConfigureServices(serviceCollection);
        _serviceProvider = serviceCollection.BuildServiceProvider();

        var serviceScope = _serviceProvider.CreateScope();
        var context = serviceScope.ServiceProvider.GetService<MyDBContext>();

        var t = new Test(context);

        var t1 = t.List();
        var t2 = t.List();
        var t3 = t.List();

        await t1;
        await t2;
        await t3;

    }


}

class Test 
{

    private MyDBContext _context = null;

    public Test(MyDBContext_context)
    {
        context = _context;
    }


    public async Task<List<test_list>> List()
    {
        return await context.test_list.ToListAsync<test_list>();
    }


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