Multithreading Delphi中线程速度的提高
我的问题是关于应用程序改进的类型/种类。我想提高我的线程速度(我不能提高线程的复杂性)。我的问题是,如果函数的参数不是整数/longint,而是使用byte作为类型,这会改变/提高我的速度吗 不发送数组,而是向这些数组发送指针,这种技术会提高我的速度吗 我还可以使用哪些技巧来提高线程的速度(复杂性除外) 上面的代码是我使用的简化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
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的说法也适用于线程:有些人在遇到问题时,会想“我知道,我会使用线程。”现在他们有两个问题。