表演ForEach

时间:2011-10-11 08:40:08

标签: c# .net foreach parallel-processing

我需要提高ForEach的性能。

//Pseudocode
foreach (item i item in items)
{
//Call service to open DB conn and get data
}

在此循环中,调用打开会话sqlserver的服务,从数据库获取数据并关闭会话,因此对于每次迭代。 我可以做什么?。 感谢。

2 个答案:

答案 0 :(得分:2)

这听起来好像是Parallel.ForEach的完美使用 - 所以你试过吗?

Parallel.ForEach(queries, query => {
    // Perform query
});

您可能希望指定并行级别等选项 - 并确保您的连接池支持任意数量的连接。当然,衡量之前和之后的表现,以确保它实际上有所帮助。

答案 1 :(得分:1)

也许你可以在每次迭代中开始一个新线程:

foreach (item i in collection)
{
    Thread t = new Thread(functionToCall);
    t.Start()
}

functionToCall()
{
    database = openSQLSession();
    data databaseData = database.getData();
    dataCollection.Add(databaseData);
    closeSQLSession();
}

当然这是一个简单的例子,非常伪代码,但我希望你能得到它的主旨吗?