Мы хотим передать часть нашего приложения в внешнюю компанию. Эти компоненты делают асинхронные запросы на внешние сайты и обрабатывают контент с помощью парсеров html или регулярных выражений.Измерьте интенсивное время процессора с асинхронным кодом
async Task Do()
{
var webContent = await Get("http://...");
var match = Regex.Match(webContent);
if (IsXXX(match))
{
webContent = await Get("http://other...");
}
}
Каждый компонент отличается, некоторые делают только один запрос, другие делают намного больше. Мы хотим убедиться, что часть процессора с интенсивным вычислением (Regex, Parsing) занимает не более 100 мс и хочет протестировать ее автоматически как первый шаг в конвейере обеспечения качества. Есть ли способ измерить производительность без времени ожидания для веб-запросов?
Я вижу только два решения в данный момент, но хотел бы знать, если есть лучший подход:
- Обеспечение обертку для веб-запросов и измерить время ожидания. Затем используйте простой секундомер для измерения времени и вычитания времени ожидания. Сложно для мыльных вызовов при использовании сгенерированных клиентских классов.
- Внедрение пользовательского контекста синхронизации и измерение времени здесь.
Есть ли встроенные решения?
Если внешняя компания будет предоставлять вам как вызовы IO, так и CPU, вам нужно будет сказать им, что вы хотите проверить каждый из этих разделов. –
Не можете ли вы просто обернуть секундомер вокруг вызова Regex.Match? Сделайте 'Do' измерьте себя и сообщите перформансу вызывающим. – usr
@Yuval: Мы хотим, чтобы было проще реализовать этот процесс недорогим способом (мы стартап без внешнего финансирования). Компоненты определяются интерфейсом, и мы генерируем интеграционные тесты для всего вызова метода. Единственное, чего не хватает, это производительность процессора. – SebastianStehle