C#StringBuilder用会话构建字符串的方法

时间:2013-03-09 01:30:09

标签: c# string text operators stringbuilder

我有这样的代码如何构建字符串:

foreach (var item in Session)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("Session Parameter: [" + item.ToString() + "]<p />Guid Value: [" + Session[item.ToString()] + "]");
    Response.Write(sb.ToString());
}

我想知道,这样的方式是否正确?我的意思是,StringBuilder这是一个非常有用的东西吗?

如果没有StringBuilder,这段代码会更快吗?

如果它是使用其他运算符构建的Label1.Text += ...

我记得+=使用的操作多于StringBuilder

  • 从原始字符串
  • 制作临时变量(副本)
  • 然后更改副本的值
  • 然后使用copy
  • 的值重新定义原始值

5 个答案:

答案 0 :(得分:3)

为什么不创建一次StringBuilder并使用一个Response.Write?:

StringBuilder sb = new StringBuilder();
foreach (string item in Session)
{
    sb.Append("Session Parameter: [");
    sb.Append(item.ToString());
    sb.Append("]<p />Guid Value: [");
    sb.Append(((string)Session[item]));        
    sb.Append(']');
}
Response.Write(sb.ToString());

你应该做基准测试。除非循环非常大,否则我认为不会有太大差异。

每当您担心性能时,都应该进行基准测试。可以从优化中获得最大收益的代码并不总是您认为的那样。

答案 1 :(得分:2)

你可能想要重构你的代码:

StringBuilder sb = new StringBuilder();
foreach (var item in Session)
{
    sb.Append("Session Parameter: [");
    sb.Append(item.ToString());
    sb.Append("]<p />Guid Value: [");
    sb.Append(Session[item.ToString()]);
    sb.Append("]");
}
Response.Write(sb.ToString());

您只需要一个StringBuilder和一个Response.Write。将它们置于循环中会使您使用StringBuilder获得的任何优化失败,并且没有理由不止一次Response.Write

答案 2 :(得分:1)

您仍未获得StringBuilder的好处,因为您仍在使用+连接字符串。针对StringBuilder优化的版本为:

foreach (var item in Session)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("Session Parameter: [");
    sb.Append(item.ToString());
    sb.Append("]<p />Guid Value: [");
    sb.Append(Session[item.ToString()]);
    sb.Append("]");

    Response.Write(sb.ToString());
}

注意:您也可以移动StringBuilder初始化,并在Response.Write之外调用foreach作为另一种可能的改进。

答案 3 :(得分:1)

您应该按如下方式更改您的代码:

sb.Append("Session Parameter: [");
sb.Append(item); // ToString is implicit
sb.Append("]<p />Guid Value: [");
sb.Append(Session[item.ToString()]);
sb.Append("]");

否则,字符串构建器没那么有用:您所做的就是附加一个值,该值是由编译器为您创建的隐式构造的构建器构建的。

最重要的是移动字符串构建器并将响应写在循环之外。

答案 4 :(得分:0)

Response.Write对于此任务来说已经足够了。字符串构建器使它变慢。

foreach (var item in Session)
{
    Response.Write("Session Parameter: [");
    Response.Write(item.ToString());
    Response.Write("]<p />Guid Value: [");
    Response.Write(Session[item.ToString()]);        
    Response.Write(']');
}

查看http://www.dotnetperls.com/response-write