2016-07-22 285 views
1

我想知道最好的方法是連接兩個字符串。 來自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的專家,但是imho的連接總是最快的,因爲沒有涉及到函數strfmt的強制轉換。最佳做法有點主觀,例如對我來說,最佳做法是可讀代碼,在這種情況下,我會更喜歡strfmt –

回答

3

簡單+運算符是最快的,因爲您可以通過一些循環和大量迭代快速進行基準測試。請參閱下面的一個簡單示例,該操作需要(在我的機器上)〜+ 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)); 
}