是否有比StringBuilder更快的“参数化”字符串构建?

时间:2012-07-12 08:54:09

标签: .net string performance t4 stringbuilder

我有一个用T4制作的自定义小“视图”引擎。基本上,它所做的是采用带有特殊指令的“静态”HTML文件并吐出类似的内容:

StringBuilder output... 
output.Append("<html> my code blah");
if(MyParameter!=null){
  output.Append(MyParameter.ToString);
}
output.append("more code");
return output.ToString();

当然,除此之外还有更多,但这就是要点。它需要一个HTML文件并生成一个普通的C#类。

我非常喜欢这种方式,因为我可以拥有静态类型的视图。不幸的是,这看起来有点慢。特别是我的问题是我有一个index视图,其中多个包含blog entry个视图,所以基本上相同的基本字符串最终会被构建,只需要在这里和那里基于几个不同的文本片段参数提供。

无论如何,我想知道是否有办法加速这个过程。有没有什么比StringBuilder更快的呢?

另外,不要担心“不干净”的代码。因为我使用T4来生成这些视图类,所以我可以使用一些很好的hack-ish代码并且它并不重要,因为我基本上只写了一次。

2 个答案:

答案 0 :(得分:2)

对于StringBuilder

  • 重用StringBuilder对象,而不是每次都创建一个新对象
  • 将StringBuilder的容量设置为最终字符串的最大大小。

替代

  • 创建所有posibble字符串的列表,并根据参数值从中选择(如果没有太多可能的排列)

另外

  • 对代码进行基准测试,因为构建字符串不太可能阻碍您。我可以在一个核心上建立30万字符串/秒。

答案 1 :(得分:0)

请指定创建的StringBuilder的容量。这将避免多个内存分配。例如:

var a = new StringBuilder(3000);

其中,3000是估计的最终字符串大小