我有一个像这样定义的结构:
const
MaxSignalRecords=255;
type
TSignalRecord=record
signal1 : integer;
signal2 : integer;
signal3 : integer;
signal4 : integer;
signal5 : integer;
signal6 : integer;
bsignal1 : Boolean;
bsignal2 : Boolean;
bsignal3 : Boolean;
bsignal4 : Boolean;
bsignal5 : Boolean;
bsignal6 : Boolean;
end;
TListSignals = Array[0..MaxSignalRecords-1] of TSignalRecord;
Run Code Online (Sandbox Code Playgroud)
此结构用于在如下算法中进行数千次计算:
for i:=1 to 900000 do
begin
CleartheList(MyList);
DotheMath(MyList);
DotheChart(MyList);
end;
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种快速的方法来将我的值初始化TListSignals为0和false.
现在我用这个:
procedure ClearListSignals(var ListSignals:TListSignals);
var
i :Integer;
begin
for i := 0 to MaxSignalRecords - 1 do
with ListSignals[i] do
begin
signal1 :=0;
signal2 :=0;
signal3 :=0;
signal4 :=0;
signal5 :=0;
signal6 :=0;
bsignal1 :=false;
bsignal2 :=false;
bsignal3 :=false;
bsignal4 :=false;
bsignal5 :=false;
bsignal6 :=false;
end;
end;
Run Code Online (Sandbox Code Playgroud)
如何提高ClearListSignals程序的性能?
RRU*_*RUZ 29
您可以使用本机中的ZeroMemory程序Windows.
var
MyList : TListSignals;
begin
ZeroMemory(@Mylist,SizeOf(MyList));
end;
Run Code Online (Sandbox Code Playgroud)
Z.B*_*.B. 23
你应该使用标准的Delphi语言函数Default()!
const
MaxSignalRecords = 255;
type
TSignalRecord = record
...
bsignal6 : Boolean;
end;
var
X: TSignalRecord
...
X := Default(TSignalRecord);
...
Run Code Online (Sandbox Code Playgroud)
没有黑客......如前所述......
Mis*_*sha 13
FillChar(ListSignals, SizeOf(ListSignals), 0);
Run Code Online (Sandbox Code Playgroud)
Tho*_*ler 10
除了所说的内容FillChar和ZeroMemory(无论如何内部只调用FillChar),您可以通过使用bsignal: set of 1..6;而不是单个布尔值来减小记录的大小,这应该会略微加快清算速度.
| 归档时间: |
|
| 查看次数: |
15344 次 |
| 最近记录: |