ResourceString VS Const для строковых литералов - PullRequest
8 голосов
/ 18 марта 2011

У меня есть пара тысяч строковых литералов в приложении Delphi. В прошлом они были выделены в отдельный файл и использовались для локализации.

Теперь мне больше не нужна локализация.

Есть ли снижение производительности при использовании строки ресурса по сравнению с простыми константами.

Должен ли я вместо этого поменять их на CONST?

Ответы [ 3 ]

8 голосов
/ 18 марта 2011

Строка const вызывает _UStrLAsg, а строка ресурса заканчивается на LoadResString.

Поскольку вопрос касается скорости, нет ничего лучше, чем делать тест.

resourcestring
    str2 = 'str2';

const
    str1 = 'str1';

function ConstStr1: string;
begin
    result := str1;
end;

function ReceStr1: string;
begin
    result := str2;
end;

function ConstStr2: string;
begin
    result := str1;
end;

function ReceStr2: string;
begin
    result := str2;
end;

procedure Test;
var
    s1, s2, s3, s4: string;
begin
    s1 := ConstStr1;
    s2 := ReceStr1;
    s3 := ConstStr2;
    s4 := ReceStr2;
end;

Впервые я использовал AQTime, добавленный в DelphiXE, для профилирования этого кода, и вот результат.Столбец времени показывает Machine Cycles.

Report from AQTime

Я мог бы сделать много ошибок новичка, профилируя это, но, как я вижу, есть разница между const и resourcestring,Если заметная разница для пользователя зависит от того, что вы делаете со строкой.В цикле со многими итерациями это может иметь значение, но используется для отображения информации пользователям, не так много.

0 голосов
/ 18 марта 2011

Так как они хранятся в одном файле, который, по-видимому, мало что делает (хорошо сделано!), Нет никаких причин не попробовать его. Я предсказываю, что это никак не повлияет на производительность, но, думаю, это зависит от того, что еще вы делаете в своем приложении.

0 голосов
/ 18 марта 2011

Строки ресурсов действительно несут накладные расходы.

По сравнению с отображением такой строки или записью ее в файл или базу данных издержки невелики.

С другой стороны, это простопереключение с ключевого слова resourcestring на const (и обратно, если вы когда-нибудь захотите снова перейти к локализации).

...