0

我有一个用 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 的代码,这并不重要,因为我基本上只编写一次。

4

2 回答 2

2

对于 StringBuilder

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

备择方案

  • 创建所有可能字符串的列表,然后根据参数值从它们中进行选择(如果没有太多可能的排列)

  • 对您的代码进行基准测试,因为构建字符串不太可能阻碍您。我可以在单核上构建 30 万串/秒。
于 2012-07-12T18:17:18.407 回答
0

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

var a = new StringBuilder(3000);

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

于 2012-07-12T17:06:55.487 回答