首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OTL's Parallel.ForEach重复调用次数的限制

OTL's Parallel.ForEach重复调用次数的限制
EN

Stack Overflow用户
提问于 2015-04-17 17:53:32
回答 1查看 411关注 0票数 2

我开始使用OTL进行多线程处理,并得到了很大的帮助!

各种Parallel.ForEach的使用都是成功的。但现在我遇到了一个不负责的案子。

请参阅以下简单完整的代码:

代码语言:javascript
复制
program test;
{$APPTYPE CONSOLE}
uses
  OtlParallel;
var
  i: integer;
begin
  for i := 1 to 1251 do
    Parallel.ForEach(0, 0).Execute(
      procedure (const num: integer)
      begin
      end);
end.

当迭代次数超过1250时,会发生错误:

'System Error. Code: 1816. Not enough quota is available to process this command'.

我能误解OTL的任何基本用法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-18 10:18:00

这个问题源自OTL内部的一些(可能有问题的)设计解决方案,目前无法解决(除非像其他人所说的那样,通过在主线程中处理消息)。

无论如何,我建议您进一步重构您的方法。例如,您可以只使用一个并行工作人员创建一个BackgroundWorker抽象,然后创建2000个工作项并将它们发送到BackgroundWorker。然后,在后台工作者的Execute方法中,您可以使用Parallel.ForEach来处理任务。

或者您可以创建一个具有多个并行任务(=核数)的BackgroundWorker,然后在每个任务中运行一个正常的for循环。这可能会给你最快的表现。

顺便说一句,如果您使用的是简单形式的Parallel.ForEach,那么新的并行。&For将执行得更好。它不具备ForEach的所有功能,但速度要快得多。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29706256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档