比较字符串连接
Comparing String concatenation
我想知道连接两个字符串的最佳方法是什么。
来自 C# 背景,我习惯了 String.Format(...)
、StringBuilder
,当然还有 +
.
在 Axapta (4.0) 中,我现在看到:
str str1, str2, str3;
;
str1 = 'Hello';
str2 = 'world';
str3 = strfmt('%1 %2',str1,str2);
info(str3);
str3 = str1+' '+str2;
info(str3);
我的问题是,什么是最佳实践,为什么?
并使其 不是 基于意见:是否存在速度差异?
简单的 + 运算符速度最快,因为您可以通过一些循环和大量迭代快速对自己进行基准测试。请参阅下面的快速示例,它(在我的机器上)+ 运算符需要 ~ 7 秒,strfmt
需要 ~ 10 秒。正如 Guido Preite 已经指出的那样,为了最好的可读性而编写它,但通常在 AX 中 strfmt
用于构建面向用户的字符串(例如通过信息日志)。
static void StrConcatPerf(Args _args)
{
int i;
int startTime;
int endTime;
str concat2StringsWithOperator(str _lhs, str _rhs)
{
;
return _lhs + _rhs;
}
str concat2StringsWithStrFmt(str _lhs, str _rhs)
{
;
return strfmt('%1%2', _lhs, _rhs);
}
;
startTime = timenow();
for (i = 0; i < 2000000; ++i)
{
//concat2StringsWithStrFmt('lhs_string', 'rhs_string');
//concat2StringsWithOperator('lhs_string', 'rhs_string');
}
endTime = timenow();
info(strfmt("Processing time was %1 secs", endTime - startTime));
}
我想知道连接两个字符串的最佳方法是什么。
来自 C# 背景,我习惯了 String.Format(...)
、StringBuilder
,当然还有 +
.
在 Axapta (4.0) 中,我现在看到:
str str1, str2, str3;
;
str1 = 'Hello';
str2 = 'world';
str3 = strfmt('%1 %2',str1,str2);
info(str3);
str3 = str1+' '+str2;
info(str3);
我的问题是,什么是最佳实践,为什么? 并使其 不是 基于意见:是否存在速度差异?
简单的 + 运算符速度最快,因为您可以通过一些循环和大量迭代快速对自己进行基准测试。请参阅下面的快速示例,它(在我的机器上)+ 运算符需要 ~ 7 秒,strfmt
需要 ~ 10 秒。正如 Guido Preite 已经指出的那样,为了最好的可读性而编写它,但通常在 AX 中 strfmt
用于构建面向用户的字符串(例如通过信息日志)。
static void StrConcatPerf(Args _args)
{
int i;
int startTime;
int endTime;
str concat2StringsWithOperator(str _lhs, str _rhs)
{
;
return _lhs + _rhs;
}
str concat2StringsWithStrFmt(str _lhs, str _rhs)
{
;
return strfmt('%1%2', _lhs, _rhs);
}
;
startTime = timenow();
for (i = 0; i < 2000000; ++i)
{
//concat2StringsWithStrFmt('lhs_string', 'rhs_string');
//concat2StringsWithOperator('lhs_string', 'rhs_string');
}
endTime = timenow();
info(strfmt("Processing time was %1 secs", endTime - startTime));
}