Создайте EF Core Context один раз для каждого запроса в ASP.Net Core.

Как вы можете видеть в других ответах, большинство алгоритмов объединяются со специальной структурой данных. Например, для несортированного списка интервалов в качестве входных данных O(n) лучше всего получить. (И, как правило, легче думать в терминах структуры данных, которая диктует алгоритм).

В этом случае ваш вопрос не является полным:

  • Дано ли вам полное или вы сами его создаете?
  • Вам нужно выполнить только один такой поиск или многие из них?
  • Есть ли у вас какие-либо оценки для операций, которые он должен поддерживать, и их частоты?

Например, если вам нужно выполнить только один такой поиск, тогда не стоит сортировать список раньше. Если бы было много, то более дорогостоящая сортировка или генерация «1D quadtree» была бы амортизирована.

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

Одной простой реализацией будет упорядоченный (по согласованию) список, в который вы вставляете все концы сегмента с началом / окончанием флага и с номером сегмента. Таким образом, анализируя его (еще O (n), но я сомневаюсь, что вы можете сделать это быстрее, если вам также нужен список всех сегментов, которые перекрываются) и сохранение трека всех открытых сегментов, которые не были закрыты при " контрольные точки ".

2
задан Pietro 18 January 2019 в 10:46
поделиться

1 ответ

основано на Что нового в EF Core 2.0 - EF Core | Документы Microsoft

Если вы хотите новый контекст один раз для каждого запроса: AddDbContext

public void ConfigureServices(IServiceCollection services)
{
 services.AddDbContext<MCContext >(
     options => options.UseSqlServer(connectionString));
 }

, тогда вы можете

public class TiketsController : ControllerBase
{
    private readonly MCContext _context;

    public TiketsController (MCContext context)
    {
        _context = context;
    }
 }

Базовый шаблон для использование EF Core в приложении ASP.NET Core обычно включает в себя регистрацию пользовательского типа DbContext в системе внедрения зависимостей и последующее получение экземпляров этого типа через параметры конструктора в контроллерах. Это означает, что для каждого запроса создается новый экземпляр DbContext.

, но если вам требуется высокая производительность / безопасное повторное использование: AddDbContextPool

public void ConfigureServices(IServiceCollection services)
{
 services.AddDbContextPool<MCContext >(
     options => options.UseSqlServer(connectionString));
 }

, тогда вы можете

public class TiketsController : ControllerBase
{
    private readonly MCContext _context;

    public TiketsController (MCContext context)
    {
        _context = context;
    }
 }

Если этот метод используется, на Когда контроллер запрашивает экземпляр DbContext, мы сначала проверим, есть ли экземпляр в пуле. Как только обработка запроса завершается, любое состояние в экземпляре сбрасывается, и сам экземпляр возвращается в пул.

0
ответ дан Mohamed Elrashid 18 January 2019 в 10:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: