Это ОЧЕНЬ открытый вопрос.
По сути, у меня есть вычислительное приложение, которое запускает тестовые комбинации для N сценариев.
Каждый тест проводится в одном выделенном потоке и включает чтение больших двоичных данных,обрабатывает его и сбрасывает результаты в БД.
Если количество потоков слишком велико, приложение становится мошенническим, пожирает всю доступную память и зависает .. Какой самый эффективный способ использоватьвсе возможности ЦП + ОЗУ (высокопроизводительные вычисления, например, 12 ядер / 16 ГБ ОЗУ) без поднятия системы на колени (что происходит, если запускается «слишком много» одновременных потоков, а «слишком много»)относительное понятие, конечно)
Я должен указать, что у меня есть очередь рабочих буферов с N работниками, каждый раз, когда кто-то заканчивает работу и умирает, новая запускается через очередь.Это работает довольно хорошо, как сейчас.Но я бы хотел избежать «ручного» и «эмпирического» задания количества одновременных потоков и иметь интеллектуальную масштабируемую систему, которая отбрасывает столько потоков за раз, что система может правильно обработать, и останавливаться на«разумное» использование памяти (целевой сервер выделен для приложения, поэтому нет проблем с другими приложениями, кроме системы)
PS: я знаю, что .Net 3.5 поставляется с пулами потоков, а в .Net 4 есть интересныеВозможности TPL, которые я до сих пор обдумываю (я до сих пор никогда не углублялся в это).
PS 2: После прочтения этого поста я был немного озадачен "дономне делай этого "ответы.Хотя я думаю, что такой запрос справедлив для вычислительной программы с высокими требованиями к памяти.
РЕДАКТИРОВАТЬ
После прочтения этого поста Я попытаюсь использовать Функции WMI