3

私は興味がある。シナリオは、たとえば数百の同時接続と1秒あたりの多数(20?)のページ読み込みを伴う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)string.Formatリテラルはインターンされますか2)クイックルックアップのためにstringbuilderの変数名を設定する価値がありますか、または3)ルックアップ自体はかなり重いですか(上記の#1がいいえの場合) )。

これはおそらくわずかな利益をもたらすだろうと私は理解していますが、私が言ったように私は興味があります。

4

4 に答える 4

6

静的メソッドString.IsInterned(str)メソッドがあります。あなたはいくつかのテストをして見つけることができます!

http://msdn.microsoft.com/en-us/library/system.string.isinterned.aspx

于 2010-06-23T18:50:21.827 に答える
3

String.Formatは実際にはStringBuilderを内部で使用するため、コードで直接呼び出す理由はありません。リテラルのインターンシップに関する限り、2つのコードバージョンは、C#コンパイラがリテラルを格納するための一時変数を作成するのと同じです。

最後に、Webページでのインターンの影響はごくわずかです。ページレンダリングは本質的に強力な文字列操作操作であるため、インターンによる違いはごくわずかです。ページとコントロールのキャッシュを使用することで、はるかに簡単な方法でパフォーマンスを大幅に向上させることができます。

于 2010-06-23T18:59:55.593 に答える
0

クイックアンサー:100k回の反復を実行して調べます。

于 2010-06-23T18:50:13.247 に答える
0

あなたは打ち負かすことはできません

return "Hello, " + username;

シナリオが本当に単純な場合。

于 2010-06-23T20:10:12.103 に答える