Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.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
Performance 如何清空动态数组 我需要多次使用动态数组,因为我认为这是一个更好的性能。 因此,我不需要每次需要时都创建一个新的动态数组_Performance_Delphi_Dynamic Arrays_Freepascal - Fatal编程技术网

Performance 如何清空动态数组 我需要多次使用动态数组,因为我认为这是一个更好的性能。 因此,我不需要每次需要时都创建一个新的动态数组

Performance 如何清空动态数组 我需要多次使用动态数组,因为我认为这是一个更好的性能。 因此,我不需要每次需要时都创建一个新的动态数组,performance,delphi,dynamic-arrays,freepascal,Performance,Delphi,Dynamic Arrays,Freepascal,我想问一下,如果我对多个指令使用同一数组,是否会导致错误和效率低下,然后清除它并重新使用它?我怎样才能纠正我的程序,这样,它可能会接近我的需要。 我的代码: procedure Empty(local_array : array of Integer); var i : Integer; begin for i:= 0 to high(local_array) do local_array[i]:= nil; Setlength(local_a

我想问一下,如果我对多个指令使用同一数组,是否会导致错误和效率低下,然后清除它并重新使用它?我怎样才能纠正我的程序,这样,它可能会接近我的需要。 我的代码:

procedure Empty(local_array : array of Integer);
var
    i : Integer;

begin
    for i:= 0 to high(local_array) do 
        local_array[i]:= nil;
        Setlength(local_array, 0);          
end;

如果要重用阵列,请不要更改其大小。更改阵列的大小,或者更具体地说增加阵列的大小,可能会导致需要重新分配数据

什么是阵列数据重新分配? 在Delphi中,所有数组都需要存储在连续内存块中。这意味着,如果您试图增加阵列的大小,并且当前已分配给阵列的内存块之后已有一些数据,则需要将整个阵列移动到另一个内存位置,在该位置有足够的空间将新的阵列大小存储在一个连续内存块中

所以,不要调整数组的大小,只需将数组项的值设置为某个默认值即可。是,这意味着这样的数组仍将占用其分配的内存。但这就是重用这样的阵列的目标,因为这样可以避免为阵列分配/释放内存的开销


如果您这样做,请不要忘记在阵列中存储您自己的已用项目计数,因为其长度可能大于实际使用的项目数。

如果您要重用阵列,请不要使用其大小。更改阵列的大小,或者更具体地说增加阵列的大小,可能会导致需要重新分配数据

什么是阵列数据重新分配? 在Delphi中,所有数组都需要存储在连续内存块中。这意味着,如果您试图增加阵列的大小,并且当前已分配给阵列的内存块之后已有一些数据,则需要将整个阵列移动到另一个内存位置,在该位置有足够的空间将新的阵列大小存储在一个连续内存块中

所以,不要调整数组的大小,只需将数组项的值设置为某个默认值即可。是,这意味着这样的数组仍将占用其分配的内存。但这就是重用这样的阵列的目标,因为这样可以避免为阵列分配/释放内存的开销


如果这样做,请不要忘记在数组中存储您自己的已用项目计数,因为其长度可能大于实际使用的项目数。

您的代码甚至无法编译。您提出的解决方案有点缺陷。1)
local\u数组
按值传递,这意味着它是原始数组的副本。2) 您应该将数组值设置为零,而不是零。3) 您要做的最后一件事是将数组的长度设置为零,这与出于性能原因重用数组的目标相矛盾。如果要重用数组,则应重用它。您的代码一旦编译就不会这样做。它会破坏阵列。我敢肯定,您正在尝试优化性能,而没有真正了解动态阵列是如何实现的。在解决性能问题之前,您需要了解这一点。还值得指出的是,问题中的代码甚至没有动态数组。这是一个开放的数组。文档是一个很好的开始:,,等等。您的代码甚至没有编译。您提出的解决方案有点缺陷。1)
local\u数组
按值传递,这意味着它是原始数组的副本。2) 您应该将数组值设置为零,而不是零。3) 您要做的最后一件事是将数组的长度设置为零,这与出于性能原因重用数组的目标相矛盾。如果要重用数组,则应重用它。您的代码一旦编译就不会这样做。它会破坏阵列。我敢肯定,您正在尝试优化性能,而没有真正了解动态阵列是如何实现的。在解决性能问题之前,您需要了解这一点。还值得指出的是,问题中的代码甚至没有动态数组。这是一个开放的数组。文档是一个很好的开始:,,等等。