Увеличение использования одноядерного процессора - PullRequest
0 голосов
/ 07 января 2019

У меня есть простой цикл while в C # следующим образом:

private static long a;

static void Main(string[] args)
{
    a = 0;
    while (a >= 0)
        a++;
    Console.WriteLine(a);
}

Независимо от того, что я делаю, он не будет использовать более 60% одного потока процессора (логический процессор), обычно около 40%. Я хочу, чтобы он использовал 100%, как цикл C ++.

  • Я работаю в режиме разблокировки
  • Я включил писатель, так что он вынужден держать цикл, а не оптимизировать его
  • Статический, поэтому он не может автоматически создавать потоки делегатов (не уверен, что это возможно, но просто чтобы быть уверенным)
  • Использование .NET core 2.1, если это имеет значение
  • Visual studio 2017 ide / компилятор
  • Обычное консольное приложение

И прежде чем люди спросят, я знаю, что он никогда не будет использовать 100% общего процессора, потому что он однопоточный. Я хочу 100% только одного логического процессора.

Любая помощь будет оценена.

Редактировать: Не то же самое, что однопоточное приложение, запущенное только на одном процессоре с exe, не помогает, это не выражение linq.

1 Ответ

0 голосов
/ 07 января 2019

Используя это, я получаю 100% на процессор или 100% на использование ядра 1 all

Мне пришлось изменить счетчик на long, потому что мой компьютер слишком быстрый для int: -)

Мне также пришлось установить привязку к одному ядру для одиночного теста протектора, в противном случае он продолжал менять ядро.

Полагаю, ваш инструмент сообщает неверное значение. Если процессор имеет турбо-режим, может показывать бессмысленные значения в некоторых SW. В этом случае Windows регулярно показывает более 100% частоты процессора.

Другой причиной может быть перегрев или экономия батареи.

Попробуйте установить максимальную производительность и на другом ПК

using System;
using System.Threading;

namespace ConsoleApp1
{
    class Program
    {
        static void BusyDelay()
        {
            long i = 10000000000;
            while (i-- > 0) ;
        }

        static void Main(string[] args)
        {
            /* use "1" intead of "ProcessorCount" for single thread insted */
            for (int i = 0; i < Environment.ProcessorCount ; i++)
            {
                new Thread(BusyDelay).Start();                
            }                        
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...