关于字符串实习表现的问题

时间:2010-06-23 18:47:55

标签: c# .net performance string-interning

我很好奇。该场景是具有例如的web应用/站点。 100个并发连接和每秒许多(20?)页面加载。

如果应用需要服务器格式化字符串

string.Format("Hello, {0}", username);

“Hello,{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 个答案:

答案 0 :(得分:6)

有一个静态方法String.IsInterned(str)方法。你可以做一些测试并找出答案!

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

答案 1 :(得分:3)

String.Format实际上在内部使用了StringBuilder,因此没有理由直接在代码中调用它。就文字的实习而言,两个代码版本是相同的,因为C#编译器将创建一个临时变量来存储文字。

最后,网页实习的影响可以忽略不计。页面渲染本质上是一种重型字符串操作操作,因此实际差异可以忽略不计。通过使用页面和控件缓存,您可以以更简单的方式获得更大的性能优势。

答案 2 :(得分:0)

快速回答:运行100k迭代并查找。

答案 3 :(得分:0)

你无法击败

return "Hello, " + username;

如果你的情景非常简单。