gpt4 book ai didi

multithreading - OTL的Parallel.ForEach的重复调用次数受到限制

转载 作者:行者123 更新时间:2023-12-03 18:36:07 25 4
gpt4 key购买 nike

我开始将OTL用于多线程,并获得了很大的帮助!

多种使用Parallel.ForEach的方法已经成功。但是现在我遇到了一个不负责任的案件。

请查看下面的简单完整代码:

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的基本用法吗?

最佳答案

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

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

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

顺便说一句,如果您以其简单形式使用Parallel.ForEach,则新的Parallel。&For将表现更好。它没有ForEach的所有风吹草动,但速度要快得多。

关于multithreading - OTL的Parallel.ForEach的重复调用次数受到限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29706256/

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