2016-07-22 10 views
1

2つの文字列を連結するのが最善の方法であると思っていました。 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); 

私の質問は、ベストプラクティスとその理由をconcideredれているもの、でしょうか? それを作るにはではない意見:速度に違いはありますか?

+1

私はAxaptaのエキスパートではありませんが、strfmtという関数がキャストされていないので、連結は常に最も速いものです。ベストプラクティスはちょっと主観的です。たとえば、私にとってベストプラクティスは読みやすいコードです。この場合はstrfmtを優先します –

答えて

3

単純な+演算子は、いくつかのループと多数の反復ですぐにベンチマークできるので、最も高速です。私のマシンでは、+演算子の場合は7秒、strfmtの場合は〜10秒という簡単な例を参照してください。すでにGuido Preiteで指摘されているように、読みやすくするために記述してください。通常、AXは、ユーザーに向かう文字列を構築するために使用されます(例:infolog)。

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)); 
}