gpt4 book ai didi

c# - 为什么 C# Parallel.Invoke 很慢?

转载 作者:行者123 更新时间:2023-11-30 13:09:27 25 4
gpt4 key购买 nike

我这样做:

    private static void Main(string[] args)
{
var dict1 = new Dictionary<int, string>();
var dict2 = new Dictionary<int, string>();
DateTime t1 = DateTime.Now;
for (int i = 1; i < 1000000; i++)
{
Parallel.Invoke(
() => dict1.Add(i, "Test" + i),
() => dict2.Add(i, "Test" + i) );
}
TimeSpan t2 = DateTime.Now.Subtract(t1);

Console.WriteLine(t2.TotalMilliseconds);

Console.ReadLine();
}

因此执行 100 万次 for 循环并将项目添加到两个不同的词典中。问题是它需要 11 秒,这是正常顺序方法(没有任务/线程)仅需 2 秒的 5 倍多。不知道为什么。

最佳答案

正如其他人所说或暗示的那样,由于并行化的开销,并行代码并不总是更快。

也就是说,您的代码将一个项目并行添加到 2 个词典 1M 次,而您应该将 1M 个项目并行添加到 2 个词典。差异很细微,但最终结果是代码比顺序案例快 ~10%(在我的机器上)。

Parallel.Invoke(() => FillDictionary(dict1, 1000000), () => FillDictionary(dict2, 1000000));

...

private static void FillDictionary(Dictionary<int, string> toFill, int itemCount)
{
for(int i = 0 ; i < itemCount; i++)
toFill.Add(i, "test" + i);
}

关于c# - 为什么 C# Parallel.Invoke 很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10802333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com