プログラムが何万回も呼び出すプロシージャがあり、次のような一般的な構造を使用しています。
procedure PrintIndiEntry(JumpID: string);
type
TPeopleIncluded = record
IndiPtr: pointer;
Relationship: string;
end;
var
PeopleIncluded: TList<TPeopleIncluded>;
PI: TPeopleIncluded;
begin { PrintIndiEntry }
PeopleIncluded := TList<TPeopleIncluded>.Create;
{ A loop here that determines a small number (up to 100) people to process }
while ... do begin
PI.IndiPtr := ...;
PI.Relationship := ...;
PeopleIncluded.Add(PI);
end;
DoSomeProcess(PeopleIncluded);
PeopleIncluded.Clear;
PeopleIncluded.Free;
end { PrintIndiEntry }
または、次のように、ローカルではなくグローバルにPeopleIncludedを宣言できます。
unit process;
interface
type
TPeopleIncluded = record
IndiPtr: pointer;
Relationship: string;
end;
var
PeopleIncluded: TList<TPeopleIncluded>;
PI: TPeopleIncluded;
procedure PrintIndiEntry(JumpID: string);
begin { PrintIndiEntry }
{ A loop here that determines a small number (up to 100) people to process }
while ... do begin
PI.IndiPtr := ...;
PI.Relationship := ...;
PeopleIncluded.Add(PI);
end;
DoSomeProcess(PeopleIncluded);
PeopleIncluded.Clear;
end { PrintIndiEntry }
procedure InitializeProcessing;
begin
PeopleIncluded := TList<TPeopleIncluded>.Create;
end;
procedure FinalizeProcessing;
begin
PeopleIncluded.Free;
end;
私の質問は、この状況では、PeopleIncludedをローカルではなくグローバルに宣言する方がよいかどうかです。理論は可能な限りローカルで定義することだと知っていますが、何万もの「作成」と「無料」を行うことに関して心配すべき問題があるかどうか知りたいですか?それらをグローバルにすると、作成は1回、無料は1回だけになります。
この場合に使用する推奨される方法は何ですか?
推奨される方法がまだローカルで定義することである場合、ローカルで定義することがまだオプションであるときにグローバルに定義する方が良い状況があるかどうか疑問に思います。