2014-06-23 79 views

回答

1

你的代码显示有范围的IEnumerator<T>,但是让我们假设你也有一个用于创建枚举的IEnumerable<T>

您可以使用Parallel.ForEach并行化循环,并使用Interlocked.Increment以原子方式递增count

另外,从你所看到的,似乎没有理由在循环外声明两个字符串。除非你需要跨线程共享这些变量,否则不要。

int count = 0; 

Parallel.ForEach(items, i => { 

    int newCount = Interlocked.Increment(ref count); 

    string key = source["ItemId"] 
    string prv_Key = string.Empty; 
}); 
+0

请注意,如果在循环中使用'count',它可能会表现不正常。 – svick

+0

@svick这是一个很好的观点。我添加了一个'newCount' var,它将'Increment'的结果作为读者的提示。 – dcastro

+0

另外值得关注的是IDataReader在它迭代时改变了_same object_,这意味着您可能需要额外的投影来避免数据传输。 –

相关问题