首页 > 解决方案 > 并行:打印 CPU 核心数

问题描述

环境

问题

打印项目正在运行的 CPU 内核编号(而不是可用内核的数量)。

代码

using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Test {
    class Program {
        static void Main(string[] args) {
            Run();
        }

        static void Run() {
            string fileDirectory = "/path/to/files/";

            List<string> symbols = new List<string> {
                "AAPL",
                "AMZ",
                "NICK",
                "ZEUS"
            };

            ParallelOptions parallelOptions = new ParallelOptions {MaxDegreeOfParallelism = Environment.ProcessorCount};

            Console.WriteLine("parallelOptions.MaxDegreeOfParallelism = " + parallelOptions.MaxDegreeOfParallelism);

            Parallel.ForEach(symbols, parallelOptions, symbol => {
                // Pass symbol filepath to ProcessFile.
                ProcessFile(String.Format("{0}{1}{2}", fileDirectory, symbol, ".csv"));
            });
        }

        static void ProcessFile(string filePath){
            Console.WriteLine("Processing " + filePath);
        }
    }
}

电流输出

parallelOptions.MaxDegreeOfParallelism = 4
Processing /path/to/files/AAPL.csv
Processing /path/to/files/AMZ.csv
Processing /path/to/files/ZEUS.csv
Processing /path/to/files/NICK.csv

期望的输出

parallelOptions.MaxDegreeOfParallelism = 4
Processing /path/to/files/AAPL.csv on CPU Core 1
Processing /path/to/files/AMZ.csv on CPU Core 4
Processing /path/to/files/ZEUS.csv on CPU Core 2
Processing /path/to/files/NICK.csv on CPU Core 3

问题

获取 CPU 内核数(而不是可用内核数)的正确方法是什么?编辑:理想情况下寻找 .Net Core 类/方法,而不是调用外部操作系统命令(Top、PS 等)。

标签: c#.net-coreparallel.foreach

解决方案


推荐阅读