如何将所有处理器内核用于 x64 应用程序

How to Use all processor cores for x64 application

我有一个比较两个数组的简单代码:

static void Main(string[] args)
    {
        String directory = @"C:\path\";
        String[] linesA = File.ReadAllLines(Path.Combine(directory, "array1.txt"));
        String[] linesB = File.ReadAllLines(Path.Combine(directory, "array2.txt"));

        var onlyB = linesA.Where(a => linesB.Any(b => a.ToLower().Contains(b.ToLower())));

        File.WriteAllLines(Path.Combine(directory, "Result.txt"), onlyB);
    }

有什么方法可以使用处理器的所有内核来比较这两个数组吗?

如果你真的想加快速度(而不是仅仅使用更多内存),你可以做一些事情。

  1. 不要对两个文件都使用 File.ReadAllLines()(将整个文件读入内存),而是对外循环中使用的文件使用 File.ReadLines()。这只会逐行读取该文件并避免潜在的大量内存使用。
  2. 不要在字符串上多次使用 ToLower(),而是像这样使用 string.IndexOf()var onlyB = linesA.Where(a => linesB.Any(b => a.IndexOf(b, StringComparison.OrdinalIgnoreCase) >= 0));
  3. 使用 .AsParallel() 并行化部分循环。

综合起来:

var linesA = File.ReadLines(Path.Combine(directory, "array1.txt"));
var linesB = File.ReadAllLines(Path.Combine(directory, "array2.txt"));

Stopwatch sw = Stopwatch.StartNew();

var onlyB = linesA.AsParallel().Where(a => linesB.Any(b => a.IndexOf(b, StringComparison.OrdinalIgnoreCase) >= 0));

进行这些更改后,我的测试程序从 ~3.8 秒缩短到 ~0.6 秒,并且使用的内存少了很多。