2011-07-18 17 views
2

想知道以下哪個選項更有效。有什麼建議麼?哪個更高效:代碼中的硬編碼字符串 - 或 - 重用字符串引用?

清單1

string header = "Header 1"; // create a string variable and reuse 
client.AddMessage(header, ...); 
client.AddMessage(header, ...); 
client.AddMessage(header, ...); 
client.AddMessage(header, ...); 
client.AddMessage(header, ...); 
... 

清單2個

client.AddMessage("Header 1", ...); // hard code the string in each call 
client.AddMessage("Header 1", ...); 
client.AddMessage("Header 1", ...); 
client.AddMessage("Header 1", ...); 
client.AddMessage("Header 1", ...); 
.... 
+0

我不認爲這會有所作爲,在第一種情況下更改文本會更容易! ! – V4Vendetta

回答

6

你可能不應該關心這種(可能)微優化:什麼事情,在這裏,可維護性:

  • 你只有一個字符串?
  • 或者您有一天或另一天有幾個不同的值?


(編譯器應該優化,對於你,反正我想)

+0

+1「不要microoptimise」。可維護性更重要。 –

+0

它甚至沒有優化。它們都指向相同的內存地址。然而,這使得難以維護 – Rob

3

字符串是在.NET世界interned,所以任何一個都同樣的方式工作。

換句話說,它在性能方面沒有任何區別。

至於可維護性 - 如果您需要更改標題名稱,選項1更好(DRY)。

0

字符串將被重新使用(interned)。所以他們應該同樣高效。我認爲清單1更易於維護。

+0

我同意,清單2更具可讀性,但清單1更可維護 - 只有1個地方需要更新。 –

+0

@Barry,哎呀我的意思是說清單1.編輯。 –

0

兩者都是一樣的。字符串被實施。

0

我不是100%肯定,但我認爲它你可以添加常量到您的字符串聲明,如果同樣的事情你想要更多的性能,但我不認爲你會看到任何可衡量的差異。

但是,清單1有一個好處,你可以通過更改代碼的一部分來更改值...

0

第一個選項對於重構而言效率更高,如果您希望更改代碼,則只需更改一行即可。另外,如果它總是在編譯時定義相同的值,那麼可能需要考慮使用常量。

3

我懷疑這裏面有很多,但是清單1我會說,因爲清單2中的所有單個字符串都必須依次創建,除非優化器在後臺執行任務。

我得到的版本之一,但使用常量,而不是改變值。

const string HEADER = "Header 1"; 
+0

這就是我已經做到的 –

+0

所有這些字符串都不需要創建,它們都指向相同的內存地址 – Rob

0

如果你真的相信這段代碼是一個性能瓶頸,你應該嘗試一下兩種方式,配置文件,然後你就會知道其中更有效。

如果您不在意測量,請不要優化

如果你只是出於好奇,Strings get interned in .NET,所以從性能的角度來看,這兩者完全一樣 - 即不要做第二個,因爲那麼必須維護它的人會殺了你。

+0

如果我必須保持這一點,我會抱怨這個白癡,用快速搜索和替換來修復它,然後檢查源代碼控制,看看白癡是誰(並且希望它不是我!) –

+0

有什麼說的? 「代碼就好像那個必須維護它的人是一個知道你住在哪裏的斧頭精神病患者」或類似的東西。 –

相關問題