Как проверить нет. ядер и общий оперативной памяти в ПК и сделать процесс, используя различные методы? - PullRequest
0 голосов
/ 10 мая 2018

Я хочу, чтобы мое приложение проверило, нет ли.ядер и объема оперативной памяти на компьютере, на котором он запущен, и если значения выше определенных желаемых значений, запустите мой код, используя параллельные методы (например, Parallel.For / Foreach и PLINQ), и значения будут ниже, чем обычно (т.е. непараллельно) методы, что-то вроде

int corecount = Environment.ProcessorCount;
ComputerInfo myCompInfo = new ComputerInfo();
var totalram = myCompInfo.TotalPhysicalMemory/ 1024 / 1024;

if (corecount>2 && totalram>1000)
{
    //use parallel methods
}
else
{
    //use normal methods
}

Это правильный способ сделать это?

1 Ответ

0 голосов
/ 10 мая 2018

Есть лучший, если нет, верный путь.


Общая идея:

  • Напишите код, который выполняется параллельно, используя PLINQ / Parallel.For ().
  • Затем вычислите степень параллелизма , при этом значение равно 1, когда машина недостаточно способна.

Пример кода PLINQ может выглядеть следующим образом:

public static void MyParallelMethod()
{
    var dop = GetDegreeOfParallelism();

    //use parallel methods and pass them the degree of parallelism

    var result = linqSource
        .AsParallel()
        .WithDegreeOfParallelism(dop)
        .Where(...)
        .Select(...)
        .
        ...;
}

private static int GetDegreeOfParallelism()
{
    var corecount = Environment.ProcessorCount;
    var myCompInfo = new ComputerInfo();
    var availableRam = myCompInfo.TotalPhysicalMemory / 1024 / 1024;

    //Devise your logic to calculate dop...
    //Return 1 when no parallelism is possible.

    return dop;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...