【问题标题】:string builder or html tag builder for html. which is efficient?用于 html 的字符串生成器或 html 标记生成器。哪个有效?
【发布时间】:2013-03-03 05:43:42
【问题描述】:

我通常使用字符串生成器在代码隐藏中动态构造html并将其写入Dom。到目前为止,我从未使用 htmlbuilder 在代码隐藏中构建 html。最近看到我们的一些项目正在使用htmlbuilder。我的问题是,我觉得在 stringbuilder 中构建 html 很舒服。由于有专门用于此的 htmlbuilder,请告诉我哪个对于构建动态 html 和写入 dom 是有效的。另外,它们在构建动态 html 方面的优势。

另外,性能方面哪个更好?

【问题讨论】:

  • 你指的是TagBuilder吗?
  • 是的,我指的是 html 标签生成器类。

标签: asp.net html performance stringbuilder


【解决方案1】:

如果您引用 @987654321@ 类,它在内部使用 StringBuilder

/// <summary>
    /// Renders the HTML tag by using the specified render mode.
    /// </summary>
    /// 
    /// <returns>
    /// The rendered HTML tag.
    /// </returns>
    /// <param name="renderMode">The render mode.</param>
    public string ToString(TagRenderMode renderMode)
    {
      StringBuilder sb = new StringBuilder();
      switch (renderMode)
      {
        case TagRenderMode.StartTag:
          sb.Append('<').Append(this.TagName);
          this.AppendAttributes(sb);
          sb.Append('>');
          break;
        case TagRenderMode.EndTag:
          sb.Append("</").Append(this.TagName).Append('>');
          break;
        case TagRenderMode.SelfClosing:
          sb.Append('<').Append(this.TagName);
          this.AppendAttributes(sb);
          sb.Append(" />");
          break;
        default:
          sb.Append('<').Append(this.TagName);
          this.AppendAttributes(sb);
          sb.Append('>').Append(this.InnerHtml).Append("</").Append(this.TagName).Append('>');
          break;
      }
      return ((object) sb).ToString();
    }

所以基本上唯一的区别是它提供了一些很好的方法来定位某些 html 特定的东西,比如 id、打开的结束标签等。

我建议你最好使用它而不是直接使用字符串生成器,因为它可以减少你在 html 标签中出错的可能性

【讨论】:

  • 其实我觉得当我使用字符串生成器时,阅读代码和调试内容的可能性更大。我也想知道,从性能角度来看,哪个更适合创建大型动态 html 内容?
  • @Moniecorleone 正如丹尼尔所说,TagBuilder 在内部使用了 StringBuilder。性能问题是无效的。
  • 那么唯一的区别是,实现方式?
  • TagBuilder 需要弄清楚如何呈现你告诉它的内容;准确地告诉 StringBuilder 做什么的命令式代码可能更简单、更直接,需要更少的 CPU 周期,最重要的是,更少的分支(ifs、开关和循环)。分支是这段代码中最耗费 CPU 的东西,也是编写基于 StringBuilder 的代码时优化的机会。您可能还大致知道字符串的长度,这是内存压力/复制的主要节省。 StringBuilder 在许多情况下获胜,最坏的情况是平局。
猜你喜欢
  • 2018-03-19
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 2011-02-11
  • 2010-12-05
  • 2018-03-07
  • 1970-01-01
  • 2018-07-08
相关资源
最近更新 更多