Я профилирую свою заявку и вижу, что много времени уходит на сон. Там много мест, где называется сон. Вызван сон, потому что поток ожидает ресурса во многих местах. Но есть фоновые задачи, которые время от времени выполняются, выполняя некоторые действия по очистке и т. Д. Эти задания спят между каждым запуском.
Я хотел бы профилировать свое приложение таким образом, чтобы оно не включало время, затрачиваемое на сон при вызове из фоновых заданий (который является конкретным классом, давайте назовем его «класс BackGroundJobs»). Я просто хочу получить время, когда приложение / поток спит, что не из-за этого. В принципе, я хотел бы исключить сны из-за этого. Может кто-нибудь сказать мне, как это сделать?
Я пытался сделать это,
vsinstr.exe / exclude = «BackGroundJobs :: *» Executable.exe
и собрал данные профилирования.
Это только не работает, выполненный классом BackGroundJobs, но все еще включает время ожидания, которое вызывает BackGroundJobs, так как sleep не является частью BackGroundJobs. Может кто-нибудь сказать мне, как это исключить?
Просто для примера, числа все воображаемые примеры,
Class :: A :: meth (время, затраченное классом на его деятельность 5s) -> Calls Sleep 20s
Класс :: B :: meth (время, затрачиваемое классом на его деятельность 5s) -> Класс Sleep 20s
BackGroundJobs (время, занятое классом в своей деятельности 10 с) -> Класс сна 20 с
В результатах профилирования:
Время, затрачиваемое классом A :: мет: 5 с
Время, затрачиваемое классом B :: мет: 5 с
Время, затраченное BackGroundJobs: 0 с (отсутствует в отчете, поскольку он исключен)
Время, затраченное на сон: 20 с (по A :: мет) + 20 с (B :: мет) + 20 с (BackGroundJobs :: xxx) = 60 с
Я хотел бы, чтобы сон был рассчитан следующим образом,
Время, затраченное на сон: 20 с (по A :: мет) + 20 с (B :: мет) + 0 с (BackGroundJobs :: xxx) = 40 с
Как мне этого добиться?
ТИА
Задача ещё не решена.
Других решений пока нет …