Как выяснить, интенсивно ли загружается процессор или нет - PullRequest
0 голосов
/ 07 июня 2019

У меня есть некоторый код для обзора:

Task.WhenAll(contracts.Select(x => Task.Run(() =>
{
    // here some 30 lines of synchronous code

}))).GetAwaiter().GetResult();

Я думал, что этот код лучше выполнять синхронно на простом foreach, так как 30 строк кода кажутся мне не слишком интенсивными процессорами.Но я не совсем уверен в этом.

Если операция занимает более 50 мс, лучше выполнить ее асинхронно.Поэтому я должен измерить производительность этого.Но это невозможно сделать при просмотре запроса на извлечение.

Итак, есть ли другой способ выяснить, действительно ли операция интенсивно использует процессор?

ОБНОВЛЕНИЕ :

Если для завершения операции требуется более 50 мс, лучше выполнить ее асинхронно.

Я прочитал ее из блога Стивена Клири: https://blog.stephencleary.com/2013/04/ui-guidelines-for-async.html

1 Ответ

1 голос
/ 07 июня 2019

Нет никакого смысла в асинхронном запуске операций ЦП, вы просто добавляете много служебных данных и также используете тот же ресурс ЦП.

Суть асинхронных операций в том, что если вам нужно подождать, вам не нужно блокировать шаг, чтобы он мог делать что-то еще.

Таким образом, даже если операция выполняется в течение 2 минут чистого процессора, вы ничего не выиграете, если вызовете ее асинхронно.

Более того, вы все равно одновременно ожидаете завершения всех операций. Таким образом, вы можете использовать Task.Run для параллельного выполнения операций, но вам больше ничего не нужно делать с этим.

Насколько я знаю, единственная разница между выполнением .Result и .GetAwaiter().GetResult() - это тип исключения, которое вы получаете.

Итак, моя точка зрения такова: в вашем коде уже нет ничего асинхронного, так что измерять нечего.

...