Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Delphi中线程速度的提高_Multithreading_Performance_Delphi_Delphi Xe2_Complexity Theory - Fatal编程技术网

Multithreading Delphi中线程速度的提高

Multithreading Delphi中线程速度的提高,multithreading,performance,delphi,delphi-xe2,complexity-theory,Multithreading,Performance,Delphi,Delphi Xe2,Complexity Theory,我的问题是关于应用程序改进的类型/种类。我想提高我的线程速度(我不能提高线程的复杂性)。我的问题是,如果函数的参数不是整数/longint,而是使用byte作为类型,这会改变/提高我的速度吗 不发送数组,而是向这些数组发送指针,这种技术会提高我的速度吗 我还可以使用哪些技巧来提高线程的速度(复杂性除外) 上面的代码是我使用的简化 Type TArray = array of integer; Type PArray = ^TArray; Procedure TMyThread.ProcessF

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

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

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

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

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;

有什么方法可以改进这一点吗?

由于我们不知道ProcessFunction实际上做什么,所以不清楚所谓的性能问题在哪里,但有一种可能性是,vArray的(重新)分配会导致性能降低。如果是这种情况,您可能可以通过预先分配一个240的数组来加速它,然后将该数组与您在每次迭代中使用的实际大小一起传递。正如David Heffernan指出的那样,由于TArray已经是一种引用类型,所以没有必要使用显式指针。

我们不清楚所谓的性能问题在哪里,因为我们不知道ProcessFunction实际上做什么,但有一种可能是,vArray的(重新)分配会导致性能下降。如果是这种情况,您可能可以通过预先分配一个240的数组来加速它,然后将该数组与您在每次迭代中使用的实际大小一起传递。正如David Heffernan指出的那样,没有必要使用显式指针,因为TArray已经是一种引用类型。

至少解释一下如何将“参数”传递给线程。如果没有任何例子,重新开始是没有意义的。我看到重新开始的投票了吗?我认为我们不能重新打开一个被钻石mod关闭的帖子。我错了吗?
TArray
已经是参考资料了。您的代码可以越界访问数组。你需要用一个具体而现实的例子问一个真实的问题。以如此模糊的方式询问性能是毫无意义的。为什么每个人都认为线程是他们问题的解决方案?@NickHodges:我认为有人对regexp的说法也适用于线程:
有些人在遇到问题时会想“我知道,我会使用线程。”现在他们有两个问题。
至少解释一下如何将“参数”传递给线程。如果没有任何例子,重新开始是没有意义的。我看到重新开始的投票了吗?我认为我们不能重新打开一个被钻石mod关闭的帖子。我错了吗?
TArray
已经是参考资料了。您的代码可以越界访问数组。你需要用一个具体而现实的例子问一个真实的问题。以如此模糊的方式询问性能是毫无意义的。为什么每个人都认为线程是他们问题的解决方案?@NickHodges:我认为有人对regexp的说法也适用于线程:
有些人在遇到问题时,会想“我知道,我会使用线程。”现在他们有两个问题。