Есть ли способ узнать (желательно через встроенный счетчик производительности), сколько работы TPL поставил в очередь, через которую он пытается работать?
Вот некоторые подробности о том, что я пытаюсь сделать и что я вижу:
У меня большая рабочая нагрузка, которую я выгружаю в пул потоков .NET с помощью Task.Factory.StartNew () (планировщик по умолчанию). Когда нагрузка выше, чем может выдержать моя система, работа ставится в очередь до тех пор, пока либо нагрузка не уменьшится, либо мне не хватит памяти. Я обновляю пользовательский счетчик производительности (это счетчик в секунду) как часть моей обработки, и я вижу, что этот счетчик не превышает 27 000 (сообщений в секунду) независимо от того, сколько сообщений я в очереди Task.Factory.StartNew ().
Мой вопрос больше относится к мониторингу, чем к советам о том, как заставить систему работать лучше - я могу проводить микрооптимизацию, но на данный момент в счетчиках производительности нет никакой видимости, что работа налаживается. Помимо оптимизации, я хотел бы иметь возможность точно видеть, сколько работы TPL было забуферено, просто для того, чтобы я мог измерить отзывчивость моей системы. Я просматриваю, приведет ли добавление нового сообщения на стороне ввода к немедленной обработке (нулевая задержка) или будет некоторая задержка, прежде чем я увижу результаты моего запроса.
Что происходит сейчас, так это то, что ниже 27 000 сообщений в секунду, если я останавливаю ввод, я вижу, что счетчик «Сообщения, обработанные в секунду» падает до нуля. Выше этой критической точки счетчик некоторое время продолжает регистрировать 27 Кбит / с (в зависимости от того, как долго я позволил накопить резерв), пока остальная нагрузка не пройдет через систему.