C# и несколько CPU?

Собственно после прочтения, создал файл конфигурации через solution explorer и теперь он такого вида:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<runtime>
		<Thread_UseAllCpuGroups enabled="true"/>
		<GCCpuGroup enabled="true"/>
		<gcServer enabled="true"/>
	</runtime>
</configuration>


Правда на приложение это не произвело никакого впечатления и Environment.ProcessorCount.ToString() все равно считает что у меня 44 "процессора", хотя это два Xeon E5-2696v4, то есть потоков всего 88 ...

В общем не знаю что я еще не сделал, но ничего по теме так и не нашел, кроме как множества примеров как считать из файла выдуманные настройки и ничего про то, чтобы заработали подобные =/ Может надо как-то еще его включить? Активировать?

Это Windows 10, что стало важно учитывая первые комментарии!
  • Вопрос задан
  • 4309 просмотров
Решения вопроса 1
iamserge
@iamserge Автор вопроса
В общем ответ тут, не знаю какого шамана он вызвал, чтобы понять что сейчас именно этот метод актуален, но можно через переменные среды. Я тоже сделал .bat и о чудо - все процессоры заняты ... Спс, кто надоумил.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Adler_lug
@Adler_lug
Возможно функция считает только физические ядра, а не логические.
Под рукой оказался двухпроцессорник на E5-2687W v4 (12 физических ядер на проц) с выключенным HT.
Вот этот код на .Net 8 под Linux определяет все 24 ядра:
namespace CPU_Counter
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine($"The number of processors on this computer is {Environment.ProcessorCount.ToString()}.");
        }
    }
}

При чем я ничего подобного не правил. Дефолтный консольный проект .Net 8.
Ut9692W.png
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Во всех языках разработки в ThreadPool обычно есть ручной параметр количества threads,
который можно установить самому. Это более правильно поскольку только разработчик
знает природу запускаемых потоков. Например если это CPU-bound приложение то поток желательно
мапить на физическое АЛУ а если это потоки другого рода I/O bound то их можно сделать побольше
типа SetMaxThreads и задать столько сколько нужно исходя из задачи.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы