Необходимо сделать фабрику (проще лямбду конечно), которая бы выдавала свободный dbcontext из пула.
Регистрация EF выглядит так:
services.AddEntityFrameworkMySql().AddDbContextPool<ApplicationDbContext>(options => options.UseMySql(Configuration.GetConnectionString("DefaultConnection"));
Регистрация лямбды так:
services.AddTransient<Func<ApplicationDbContext>>(s => s.GetRequiredService<ApplicationDbContext>);
Однако при передаче в какой-нибудь долго живущий объект, который обращается к базе по событию/таймеру получаю исключение что контекст используется уже в другом месте.
public class SomeService
{
public SomeService(Func<ApplicationDbContext> dbFact)
{
this.dbFact = dbFact;
}
private void DoSomething()
{
using (var db = dbFact())
{
// Do...
}
}
}
Ранее работал без пула подключений, но в результате получается так что в системе плодиться куча процессов mysql. Если на момент старта приложения процессов около 90 в таскменеджере, то спустя сутки/двое их становится +1400. Думаю они бы и дальше размножались если бы приложение не завершалось из-за нехватки ресурсов. Открытое подключение оборачиваю в using, но видать где-то оно все равно не высвобождается.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как можно реализовать с помощью генератора случайных вопросов считывания с файла *xml, для теста? Чтобы вопросы не шли по порядку, а в случайном...
В документации написано, что одним из аргументов spl_autoload_register передаётся функция autoloadОбъясните подробно, как работает функция spl_autoload_register...