.net 对于“参数化”字符串构建,是否有比StringBuilder更快的方法?

.net 对于“参数化”字符串构建,是否有比StringBuilder更快的方法?,.net,string,performance,t4,stringbuilder,.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(); 当然,还有更多,但这就是要

我有一个定制的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类

我非常喜欢这种方式,因为我可以有静态类型的视图。不幸的是,这似乎有点慢。特别是我的问题是,我有一个索引视图,其中多个包含博客条目视图,因此基本上相同的基本字符串最终被构建,只是根据提供的参数在这里和那里有一些不同的文本片段

无论如何,我想知道是否有任何方法可以加快这个过程。真的有比StringBuilder更快的吗


另外,不要担心不干净的代码。因为我使用T4来生成这些视图类,所以我可以有一些非常粗糙的代码,这并不重要,因为我基本上只编写了一次

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

var a = new StringBuilder(3000);
其中,3000是StringBuilder最终字符串的估计大小

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

创建一个所有posible字符串的列表,如果没有太多的排列,只需根据参数值从中选择即可 也

对代码进行基准测试,因为构建字符串不太可能阻碍您。我可以在单个内核上每秒生成30万个字符串。
这很模糊,不是吗?至少要收集一些证据,证明是建筑商的速度慢。.NET GC性能计数器告诉您什么?探查器告诉你什么?没有比StringBuilder更快的了,使用它的Capacity属性在.NET4上没有多大区别。还有一件事你没有提到。据我所知,StringBuilder是高效构建字符串的推荐方法。也许您可以使用流将文本直接发送到目的地,而不是将其构建为字符串?可能是T4的速度很慢。+1用于重用StringBuilder对象。我在自定义JSON解析器中分析了它,新的StringBuilder恰好出现在热路径上。在我将其重新安排为StringBuilder和sb.Clear的全局实例后,我的解析器速度提高了3倍。