Axapta 比较字符串连接

Axapta 比较字符串连接,axapta,microsoft-dynamics,x++,Axapta,Microsoft Dynamics,X++,我想知道最好的办法是把两根弦连在一起。 我来自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); 我的问题是,什么是协调最佳实践,为什么?

我想知道最好的办法是把两根弦连在一起。 我来自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秒。正如前面所指出的,为获得最佳可读性而编写,但通常在AX
strfmt
中用于构建面向用户的字符串(例如,通过infolog)

static void StrConcatPerf(Args\u Args)
{
int i;
int开始时间;
国际时间;
str CONCAT2STRINGSWITH运算符(str_lhs,str_rhs)
{
;
返回左侧+右侧;
}
str CONCAT2STRINGSTRSTRFMT(str_lhs,str_rhs)
{
;
返回strfmt(“%1%2”,左,右);
}
;
startTime=timenow();
对于(i=0;i<2000000;++i)
{
//concat2stringswithtrfmt('lhs_string','rhs_string');
//concat2stringswith运算符('lhs_字符串','rhs_字符串');
}
endTime=timenow();
信息(strfmt(“处理时间为%1秒”,结束时间-开始时间));
}

简单+运算符是最快的,因为您可以通过一些循环和大量迭代快速地对自己进行基准测试。请参见下面的一个快速示例,(在我的机器上)+操作符大约需要7秒,
strfmt
大约需要10秒。正如前面所指出的,为获得最佳可读性而编写,但通常在AX
strfmt
中用于构建面向用户的字符串(例如,通过infolog)

static void StrConcatPerf(Args\u Args)
{
int i;
int开始时间;
国际时间;
str CONCAT2STRINGSWITH运算符(str_lhs,str_rhs)
{
;
返回左侧+右侧;
}
str CONCAT2STRINGSTRSTRFMT(str_lhs,str_rhs)
{
;
返回strfmt(“%1%2”,左,右);
}
;
startTime=timenow();
对于(i=0;i<2000000;++i)
{
//concat2stringswithtrfmt('lhs_string','rhs_string');
//concat2stringswith运算符('lhs_字符串','rhs_字符串');
}
endTime=timenow();
信息(strfmt(“处理时间为%1秒”,结束时间-开始时间));
}

我不是Axapta专家,但我认为连接总是最快的,因为strfmt函数没有强制转换。最佳实践有点主观,例如,对我来说,最佳实践是可读的代码,在这种情况下,我更希望strfmtI不是Axapta专家,但我认为连接总是最快的,因为strfmt函数不涉及强制转换。最佳实践有点主观,例如,对我来说,最佳实践是可读的代码,在这种情况下,我更喜欢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));
}