TagBuilder 性能如此低下?

需要通过ASP.NET MVC生成一个列表,MVC里面根正苗红的HTML生成方式是使用TagBuilder,鉴于性能的需求,对TagBuilder进行了一番性能测试.当然测试需要比较,所以采用三种方式来进行性能测试

(1):TagBuilder的方式

(2):格式化字符串的方式(string.Format)

(3):HtmlTextWriter的方式

测试使用的性能工具是老赵贡献的CodeTimer(有兴趣的可以去老赵的博客上找),感谢一下先.

测试代码如下:

Codeclass Program
    {
        static void Main(string[] args)
        {
            string result1;
            string result2;
            string result3;
            // 先热身
            CodeTimer.Initialize();
            // 针对TagBuilder的性能测试
            CodeTimer.Time("TagBuilder", 1000, () =>
            {
                StringBuilder sb = new StringBuilder();
                TagBuilderTest(sb);
                result1 = sb.ToString();
            });
            // 针对string.format的性能测试
            CodeTimer.Time("String.Format", 1000, () =>
           {
               StringBuilder sb = new StringBuilder();
               StringFormatTest(sb);
               result2 = sb.ToString();
           });
            // 针对HtmlTextWriter的性能测试
            CodeTimer.Time("HtmlTextWriter", 1000, () =>
           {
               HtmlTextWriter writer = new HtmlTextWriter(new StringWriter());
               HtmlWriter(writer);
               result3 = writer.InnerWriter.ToString();
           });
        }

        static void TagBuilderTest(StringBuilder sb)
        {
            for (var i = 0; i < 1000; i++)
            {
                TagBuilder tag = new TagBuilder("div");
                tag.Attributes["id"] = "id1";
                tag.Attributes["title"] = "google?";
                tag.InnerHtml = "goo~~gle";
                sb.Append(tag.ToString());
            }
        }

        static void StringFormatTest(StringBuilder sb)
        {
            for (var i = 0; i < 1000; i++)
            {
                sb.Append(
                    string.Format(@"<div id=""{0}"" title=""{1}"">{2}</div>", "id1", "google?", "goo~~gle")
                    );
            }
        }

        static void HtmlWriter(HtmlTextWriter writer)
        {
            for (var i = 0; i < 1000; i++)
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Id, "id1");
                writer.AddAttribute(HtmlTextWriterAttribute.Title, "google?");
                writer.RenderBeginTag(HtmlTextWriterTag.Div);
                writer.Write("goo~~gle");
                writer.RenderEndTag();
            }
        }
    }

第一次测试结果:

UV[$70H4}E2[T_AU664R4PF

第二次测试结果:

HXWZ8A1%~1WO00%5ZO%]3}X

发现测试的数据很稳定,String.Format性能最快,其次是HtmlTextWriter,最次是TagBuilder.鉴于StringFormat不容易修改和没有结构行,决定采用HtmlTextWriter的形式.

觉得TagBuilder可能比较适用于简单的单个标签的生成,毕竟不像HtmlTextWriter那样需要一个TextWriter.

转载于:https://www.cnblogs.com/zhuisha/archive/2010/03/12/1684022.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值