文字列インターンパフォーマンスに関する質問
-
29-09-2019 - |
質問
私は興味がある。シナリオは、たとえば100の同時接続と多くの(20?)ページのロードを1秒間のWebアプリ/サイトです。
アプリがフォーマットされた文字列をサーバーする必要がある場合
string.Format("Hello, {0}", username);
「こんにちは、{0}」はインターンされますか?または、それはとりなします
string hello = "Hello, {0}";
string.Format(hello, username);
インターンに関しては、より良いパフォーマンスが得られます:上記または、
StringBuilder builder = new StringBuilder()
builder.Append("Hello, ");
builder.Append(username);
あるいは
string hello = "Hello, {0}";
StringBuilder builder = new StringBuilder()
builder.Append("Hello, ");
builder.Append(username);
だから私の主な質問は次のとおりです。1)文字列。リテラルはインターンされます2)skineBuilderの可変名を迅速な検索のために設定する価値がありますか、または3) ))
私はこれがおそらく極小の利益をもたらすでしょうが、私が言ったように私は興味があります。
解決
String.Formatは実際にStringBuilderを内部で使用するため、コードに直接呼び出す理由はありません。リテラルのインターンに関する限り、2つのコードバージョンは、C#コンパイラがリテラルを保存するための一時変数を作成するのと同じです。
最後に、Webページでのインターンの効果はごくわずかです。ページレンダリングは本質的に頑丈な文字列操作操作であるため、インターニングの違いはごくわずかです。ページを使用してキャッシュを制御することで、はるかに簡単な方法で、はるかに優れたパフォーマンスの利点を達成できます。
他のヒント
静的メソッドstring.isinterned(str)メソッドがあります。テストを行い、調べることができます!
http://msdn.microsoft.com/en-us/library/system.string.isinterned.aspx
簡単な回答:100kの反復を実行して調べてください。
あなたは倒すことはできません
return "Hello, " + username;
シナリオが本当に簡単な場合。