这是代码:
using (var context = new AventureWorksDataContext())
{
IEnumerable<Customer> _customerQuery = from c in context.Customers
where c.FirstName.StartsWith("A")
select c;
var watch = new Stopwatch();
watch.Start();
var result = Parallel.ForEach(_customerQuery, c => Console.WriteLine(c.FirstName));
watch.Stop();
Debug.WriteLine(watch.ElapsedMilliseconds);
watch = new Stopwatch();
watch.Start();
foreach (var customer in _customerQuery)
{
Console.WriteLine(customer.FirstName);
}
watch.Stop();
Debug.WriteLine(watch.ElapsedMilliseconds);
}
问题在于,Parallel.ForEach
花费约400毫秒,而常规的 foreach
只需要约40毫秒。我到底做错了什么,为什么它不能按照我的期望工作?
Console.WriteLine()
让它完全无关紧要。 - H HConsole.WriteLine()
并替换为c.FirstName = c.FirstName.ToLowerInvariant()
。如果您的集合大约有5000个项目,则不会看到任何区别;但是,如果您的集合有6000、7000、10000个项目,在4核处理器上,您将会看到一个很大的差异(Parallel.Foreach
将更快)。 - Junior Mayhé