3

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

如果应用程序需要提供格式化字符串

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,因此没有理由在您的代码中直接调用它。就文字的实习而言,这两个代码版本是一样的,因为 C# 编译器会创建一个临时变量来存储文字。

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

于 2010-06-23T18:59:55.593 回答
0

你打不过

return "Hello, " + username;

如果你的场景真的那么简单。

于 2010-06-23T20:10:12.103 回答
0

快速回答:运行 100k 次迭代并找出答案。

于 2010-06-23T18:50:13.247 回答