Должен ли я вызвать ToListAsyn c (), когда сделать запрос - PullRequest
2 голосов
/ 21 января 2020

Я не долго go в C# и ищу лучшую практику написания кода. Сейчас я работаю с EF Core и имею следующий код

var details = _dbContext.Details.Where(x => x.Name == "Button");
foreach(var detail in details)
{
   ...
}

. Чтобы лучше реагировать, я стараюсь использовать ToListAsync() как

var details = await _dbContext.Details.Where(x => x.Name == "Button").ToListAsync();

Если я понял, это должен быть более эффективным способом. Должен ли я всегда использовать ToListAsync() до foreach?

То же самое для удаления. Первый

var details = _dbContext.Details.Where(x => x.Id == "Button");
_dbContext.Details.RemoveRange(details);

или

 var details = await _dbContext.Details.Where(x => x.Id == "Button").ToListAsync();
_dbContext.Details.RemoveRange(details);

Какой из них будет лучше? Итак, когда я не добавлю ToListAsync(), тогда запрос будет выполняться синхронно?

1 Ответ

0 голосов
/ 21 января 2020

В этом случае «ToListAsyn c ()» будет препятствовать вашей производительности, так же как и ToList (). Foreach l oop более чем способен обрабатывать переменную "details" без дополнительного шага преобразования его в список. Делать это асинхронно или синхронно здесь неактуально.

«детали» уже являются «IQueryable », и превращать их в «список » не нужно.

То же самое применяется для удаления, преобразование не требуется.

Если вы хотите повысить производительность, есть что-то, что вы можете сделать; Если вы используете переменную «details» только один раз для итерации в вашем foreach l oop, вы можете удалить объявление переменной все вместе и просто сделать это:

foreach(var detail in _dbContext.Details.Where(x => x.Name == "Button"))
{
   ...
}

Теперь вместо:

Создание памяти -> Чтение памяти из _dbContext.Details ... -> Копирование этого во вновь созданную память -> Чтение вновь созданной памяти -> Передача памяти в foreach l oop

Вы просто:

Чтение памяти из _dbContext.Details ... -> Передать память на foreach l oop

Много примеров вы будете read будет иметь много var назначений. Это просто для того, чтобы ученикам было легче разбираться в шагах, но зачастую это не будет более эффективным способом кодирования.

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