2011-07-18 14 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

おそらく(可能)マイクロ最適化のこの種のを気にしないでください。どのような事項について、ここでは、ある保守性:

  • あなたが1つの文字列のみを持っているのですか?
  • 、または複数の異なる値を指定できますか。


+0

+1は「最適化しないでください。保守性がはるかに重要です。 –

+0

最適化さえしていません。彼らはすべて同じメモリアドレスを指しています。しかし、それを維持するのがはるかに困難です – Rob

3

文字列は、.NETの世界でinternedなので、どちらも同じように動作します。

つまり、パフォーマンスに関しては何の違いもありません。

保守性について - ヘッダー名を変更する必要がある場合は、オプション1が優れています(DRY)。

0

文字列が再利用されます(interned)。だから両者は同じように効率的でなければならない。リスト1はより保守性があると主張したいと思います。

+0

私はリスト2がより読みやすいと確信していますが、確実にリスト1は更新可能です - 更新する場所は1つだけです。 –

+0

@Barry、私はリスト1を編集すると言った。 –

0

どちらも同じです。文字列はインターンされます。

0

イム100%確実ではない(コンパイラはとにかく、私が思う、あなたのためにそれを最適化する必要があります)しかし、私はあなたの文字列の宣言の場合へのconstを追加することができ、同じことについての思いあなたはより良いパフォーマンスを望んでいますが、私はあなたが測定可能な差異を見ることができるとは思わないと思います。

リスト1は、コードの一部を変更するだけで値を変更できるという利点があります...

0

最初のオプションはリファクタリングの目的でより効率的です。コードを変更したい場合は、変更する行は1つだけです。さらに、コンパイル時に常に同じ値を定義する場合は、定数を使用することを検討してください。

3

リスト1私は、リスト2のすべての個々の文字列は、オプティマイザが背後で何かをしていない限り、順番に作成する必要があるため、言っています。

私はバージョン1を持っていますが、値を変更しない場合は代わりにconstを使用します。あなたが本当にコードのこの作品は、パフォーマンスのボトルネックがあると思われた場合

const string HEADER = "Header 1"; 
+0

それは私がそれをやったのだろう –

+0

これらの文字列はすべて作成する必要はありません、彼らはすべて同じメモリアドレスを指している – Rob

0

、あなたはそれは両方の方法、プロファイルを試してみてください、そして、あなたは、より効率的であるを知っていますよ。

測定するのに十分でない場合は、を最適化しないでください。

好奇心から尋ねているだけの場合は、パフォーマンスの観点からも全く同じです。つまり、それを維持する必要がある人は誰でもあなたを殺すため、2つ目は実行しないでください。

+0

私はそれを維持する必要があった場合、私はその馬鹿について不平を言い、素早い検索でそれを修正し、置き換えて、ソースコントロールをチェックして、馬鹿が誰であったかを確認します(そして、私ではないことを願っています)。 –

+0

どういうことですか? "それを維持しなければならない人が、あなたがどこに住んでいるかを知っている斧を投げかけているサイコ"のようなものであるかのようにコードします。 –