我正在这样做:
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();
}
因此,执行 for 循环 100 万次,并将项目添加到两个不同的字典中。
问题是它需要 11 秒,是普通顺序方法(没有任务/线程)的 5 倍多,后者只需要 2 秒。
不知道为什么。
正如其他人所说或暗示的那样,由于并行化的开销,并行代码并不总是更快。
话虽这么说,你的代码是向 2 个字典并行添加一个项目 1M 次而你应该是并行向 2 个词典添加 1M 个项目。差异很微妙,但最终结果是代码(在我的机器上)比顺序情况快 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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)