gpt4 book ai didi

c# - Parallel.ForEach 对于 DataTable 来说工作太慢

转载 作者:太空宇宙 更新时间:2023-11-03 18:27:27 24 4
gpt4 key购买 nike

我在 DTable 中实现 Parallel.ForEach 时遇到问题。以下是我正在实现的示例代码:

Parallel.ForEach(dTable4.AsEnumerable(), row4 =>
{
string getCondition = row4[1].ToString();
getCondition = EvaluateCondExpression(getCondition); //Evaluates CM for value (CM1==2 && CM2<5);
Expression e = new Expression(getCondition); //getCondition = (2==2 && 2<5)
var evalutateCondition = e.Evaluate();
if (Convert.ToBoolean(evalutateCondition))
{
//Write string to TextBox
}
}

当我运行它时,线程没有得到有效管理,而且它比 foreach 循环花费的时间太多。EvaluateCondExpression 函数在检查用户从 GUI 组合框和 numericUpDown 提供的参数后返回值

private string EvaluateCondExpression(string getCondition)
{
string[] splitgetCondition1 = SeprateCharacter(getCondition);
foreach (string oneCondition in splitgetCondition1)
{
string conditionValue = oneCondition;
if (oneCondition.Contains("CM"))
{
conditionValue = RemoveMultipleChar(conditionValue.Replace('!', ' ').Trim());
string getInputNumber = getTableOneInputNo(conditionValue, dTable1);
string tableOneValue = checkComboxValue(m_comboBox, getInputNumber);

getCondition = getCondition.Replace(conditionValue, tableOneValue);
}
}
return getCondition;
}

串行 ForEach 计算花费了太多时间,所以我想应用 Parallel.ForEach 迭代,但不幸的是它不起作用。谁能建议我如何最大限度地提高性能以及我在 Parallel.ForEach 中做错了什么。

最佳答案

通过使用传统的 foreach,将每个迭代包装在一个任务中,您可能会看到性能提升。将每次迭代的任务添加到集合中,然后在 foreach 调用 Task.WhenAll(tasks) 之外;如果有的话,它使您能够等待昂贵的并行过程。

您可以将 Parallel.ForEach 的内容转换为 Select Linq 查询,将每次迭代转换为任务。可以将生成的任务集合交给 Task.WhenAll 方法等待

await Task.WhenAll(dtable4.AsEnumerable().Select(row4 => new Task(() =>
{
string getCondition = row4[1].ToString();
getCondition = EvaluateCondExpression(getCondition); //Evaluates CM for value (CM1==2 && CM2<5);
Expression e = new Expression(getCondition); //getCondition = (2==2 && 2<5)
var evalutateCondition = e.Evaluate();
if (Convert.ToBoolean(evalutateCondition))
{
//Write string to TextBox
}
})));

这可能无法解决您所看到的性能瓶颈,但这至少会让您等待并行进程并释放 UI 线程。

关于c# - Parallel.ForEach 对于 DataTable 来说工作太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31151903/

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