Есть такая процедура, function DelAmp(const Text: string): string; в FMX.Types.
Которая 2 раза выделяет память для всей строки, и сканирует все символы в строке, в поисках &.
TLabel.Text := 'Text'; - эта процедура выполнится 2 раза, на любой платформе. Чтобы она выполнилась 1 раз, нужно сделать
TLabel.PrefixStyle := TPrefixStyle.NoPrefix;
TText
TText.Text := 'Text'; Процедура DelAmp выполниться в любом случае на любой платформе
procedure TText.SetText(const Value: string);
[..]
begin
if Text <> Value then
begin
NewText := ConvertText(DelAmp(Value));
[..]
Стили состоят из множества TText элементов. Теперь представьте сколько ресурсов тратиться впустую.
function DelAmp(const Text: string): string;
var
I, J: Integer;
Sb: TCharArray;
begin
Result := '';
if Text <> '' then
begin
SetLength(Sb, Text.Length);
I := Low(Text);
J := 0;
while I <= High(Text) do
begin
if (Text[I] <> '&') then
begin
Sb[J] := Text[I];
Inc(J);
end
else
begin
if ((I < High(Text)) and (Text[I + 1] = '&')) then
begin
Sb[J] := Text[I];
Inc(J);
Inc(I);
end;
end;
Inc(I);
end;
Result := string.Create(Sb, 0, J);
end;
end;
Решение - скопировать FMX.Types в папку с проектом, и переделать функцию на:
function DelAmp(const Text: string): string;
begin
Result := Text;
end;