Если нужна работа с браузером, то добиваться как можно меньшей нагрузки от сайтов. Клики и загрузки страниц потребляют больше всего ресурсов. Поиск/клики по изображению прилично грузят систему.
Что бы запустить как можно больше потоков и сохранить при этом стабильность системы можно сделать очередь. Очередь загрузки страниц, очередь кликов (когда нужно кликнуть и после этого идет загрузка страниц (нагрузка). Например через глобальные переменные можно организовать взаимодействие между потоками - сделать что бы одновременно загружались страницы не более чем в 10 потоках.
Делается это так:
- Объявляете глобальную переменную (в OnApplicationStart проще всего). Ставите ей значение 0.
- Перед входом в функцию проверяем что бы значение переменной было < 10.
2.1. Если значение >= 10 то ждем n-секунд и повторяем условие проверки <10.
2.2 Если значение < 10 входим в функцию и увеличиваем глобальную переменную на 1.
- Перед выходом из функции уменьшаем глобальную переменную на 1.
Мне таким образом удалось работать не в 20 потоков, а в 60. Позже конечно перешел на http клиент с закрытием браузером и уже не 60 потоков, а 250-300.