草庐IT

embarrassingly-parallel

全部标签

c# - VS2015升级后的垃圾回收和Parallel.ForEach问题

我有一些代码可以在我自己的类RC#DataFrame类中处理数百万行数据。有许多Parallel.ForEach调用用于并行迭代数据行。此代码已使用VS2013和.NET4.5运行了一年多,没有出现任何问题。我有两台开发机器(A和B),最近将机器A升级到VS2015。大约有一半时间我开始注意到我的代码出现奇怪的间歇性卡住。让它运行很长时间,事实证明代码最终确实完成了。只需15-120分钟,而不是1-2分钟。由于某种原因,使用VS2015调试器尝试破解所有内容的尝试不断失败。所以我插入了一堆日志语句。事实证明,当在Parallel.ForEach循环期间存在Gen2集合时(比较每个Par

c# - VS2015升级后的垃圾回收和Parallel.ForEach问题

我有一些代码可以在我自己的类RC#DataFrame类中处理数百万行数据。有许多Parallel.ForEach调用用于并行迭代数据行。此代码已使用VS2013和.NET4.5运行了一年多,没有出现任何问题。我有两台开发机器(A和B),最近将机器A升级到VS2015。大约有一半时间我开始注意到我的代码出现奇怪的间歇性卡住。让它运行很长时间,事实证明代码最终确实完成了。只需15-120分钟,而不是1-2分钟。由于某种原因,使用VS2015调试器尝试破解所有内容的尝试不断失败。所以我插入了一堆日志语句。事实证明,当在Parallel.ForEach循环期间存在Gen2集合时(比较每个Par

c# - 是否可以限制 Parallel.ForEach 的内核数?

我在我的代码中使用了Parallel.ForEach。我所有的8个核心都达到100%。这对服务器上运行的其他应用程序不利。是否可以将执行限制为4个核心? 最佳答案 将ParallelOptions的实例传递给ParallelOptions.MaxDegreeOfParallelism设置为4到Parallel.ForEach。尽管如此,这在其他机器上可能没有意义,它们的内核可能比您多或少。通常,您应该让框架决定并行度。 关于c#-是否可以限制Parallel.ForEach的内核数?,我

c# - 是否可以限制 Parallel.ForEach 的内核数?

我在我的代码中使用了Parallel.ForEach。我所有的8个核心都达到100%。这对服务器上运行的其他应用程序不利。是否可以将执行限制为4个核心? 最佳答案 将ParallelOptions的实例传递给ParallelOptions.MaxDegreeOfParallelism设置为4到Parallel.ForEach。尽管如此,这在其他机器上可能没有意义,它们的内核可能比您多或少。通常,您应该让框架决定并行度。 关于c#-是否可以限制Parallel.ForEach的内核数?,我

c# - 如何从 Parallel.ForEach 收集返回值?

我正在并行调用一个慢速网络服务。一切都很好,直到我意识到我需要从服务中获取一些信息。但我不知道从哪里找回值(value)。我无法写入数据库,在使用Parallel.ForEach调用的方法中,HttpContext.Current似乎为空下面是一个示例程序(在你的脑海中,请想象一个慢速的网络服务而不是字符串连接)usingSystem;usingSystem.Threading.Tasks;classProgram{staticvoidMain(string[]args){WordMakerm=newWordMaker();m.MakeIt();}publicclassWordMake

c# - 如何从 Parallel.ForEach 收集返回值?

我正在并行调用一个慢速网络服务。一切都很好,直到我意识到我需要从服务中获取一些信息。但我不知道从哪里找回值(value)。我无法写入数据库,在使用Parallel.ForEach调用的方法中,HttpContext.Current似乎为空下面是一个示例程序(在你的脑海中,请想象一个慢速的网络服务而不是字符串连接)usingSystem;usingSystem.Threading.Tasks;classProgram{staticvoidMain(string[]args){WordMakerm=newWordMaker();m.MakeIt();}publicclassWordMake

c# - 打破 parallel.foreach?

我如何突破parallel.for循环?我有一个非常复杂的语句,如下所示:Parallel.ForEach(ColorIndex.AsEnumerable(),newAction((ColorIndexHolderElement)=>{if(Element.StartIndex=I){Found=true;break;}}));使用并行类,我可以优化这个过程。然而;我不知道如何打破并行循环?break;语句抛出以下语法错误:Noenclosingloopsoutofwhichtobreakorcontinue 最佳答案 使用Para

c# - 打破 parallel.foreach?

我如何突破parallel.for循环?我有一个非常复杂的语句,如下所示:Parallel.ForEach(ColorIndex.AsEnumerable(),newAction((ColorIndexHolderElement)=>{if(Element.StartIndex=I){Found=true;break;}}));使用并行类,我可以优化这个过程。然而;我不知道如何打破并行循环?break;语句抛出以下语法错误:Noenclosingloopsoutofwhichtobreakorcontinue 最佳答案 使用Para

c# - 我怎样才能等到 Parallel.ForEach 完成

我在当前项目中使用TPL并使用Parallel.Foreach来旋转多个线程。Task类包含Wait()以等待任务完成。像那样,我如何才能等待Parallel.ForEach完成,然后开始执行下一条语句? 最佳答案 您无需执行任何特殊操作,Parallel.Foreach()将等待所有分支任务完成。在调用线程中,您可以将其视为单个同步语句,例如将其包装在try/catch中。更新:旧的Parallel类方法不适合异步(基于任务的)编程。但是从dotnet6开始,我们可以使用Parallel.ForEachAsync()awaitPa

c# - 我怎样才能等到 Parallel.ForEach 完成

我在当前项目中使用TPL并使用Parallel.Foreach来旋转多个线程。Task类包含Wait()以等待任务完成。像那样,我如何才能等待Parallel.ForEach完成,然后开始执行下一条语句? 最佳答案 您无需执行任何特殊操作,Parallel.Foreach()将等待所有分支任务完成。在调用线程中,您可以将其视为单个同步语句,例如将其包装在try/catch中。更新:旧的Parallel类方法不适合异步(基于任务的)编程。但是从dotnet6开始,我们可以使用Parallel.ForEachAsync()awaitPa