【问题标题】:Speed Improvement of threads DelphiDelphi 线程的速度改进
【发布时间】:2013-01-07 17:46:40
【问题描述】:

我的问题是关于应用程序改进的类型/种类。我想提高我的线程速度(我不能提高线程的复杂性)。我的问题是,如果我将使用 byte 作为类型而不是整数/longint 作为函数的参数,这会改变/提高我的速度吗?

不是发送数组,而是发送指向这些数组的指针,这种技术会提高我的速度吗?

我可以使用哪些其他技巧来提高线程的速度(复杂性除外)

上面的代码是我使用的简化。

Type TArray = array of integer;
Type PArray = ^TArray;

Procedure TMyThread.ProcessFunction(iNr:integer; vArray:PArray);
begin
   vArray^[iNr-2]:=5;
   //......
end;

Procedure TMyThread.Execute;
var vArray:TArray;
    i,iNr:integer;
begin
   Randomize;
   While Not Terminated do
   begin
       iNr:=Random(240);
       SetLength(vArray,iNr);
       for i:=0 to iNr-1 do
          vArray[i]:=i+2

       ProcessFunction(iNr,@Array);
   end;
end;

有什么方法可以改善吗?

【问题讨论】:

  • 至少解释一下如何将“参数”传递给线程。没有任何示例,重新打开是没有意义的
  • 我看到要重新开放的投票?我不认为我们可以重新打开被钻石模组关闭的帖子。我错了吗?
  • TArray 已经是参考。您的代码可以越界访问数组。你需要用一个具体而现实的例子来问一个真正的问题。以如此模糊的方式询问性能是没有意义的。
  • 为什么每个人都认为线程可以解决他们的问题?
  • @NickHodges:我认为有人所说的关于 regexp 的内容也适用于线程:Some people, when confronted with a problem, think “I know, I'll use threading.” Now they have two problems.

标签: multithreading performance delphi delphi-xe2 complexity-theory


【解决方案1】:

目前尚不清楚所谓的性能问题在哪里,因为我们不知道 ProcessFunction 实际做了什么,但一种可能性是性能被 vArray 的(重新)分配杀死。如果是这种情况,您可能可以通过仅预分配一个 240 的数组来加快速度,然后将其连同您在每次迭代中使用的实际大小一起传入。正如 David Heffernan 指出的那样,由于 TArray 已经是一个引用类型,因此没有必要使用显式指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 2020-05-29
    • 2021-11-14
    • 2013-05-04
    • 2014-10-28
    • 1970-01-01
    相关资源
    最近更新 更多