Перейти к содержанию
  • Регистрация
  • 0
ENERGY

Не оптимизированный TLabel и TText (решение)

Вопрос

Есть такая процедура, 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;

 

Изменено пользователем ENERGY

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

Ответы на этот вопрос пока отсутствуют

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...