路漫漫,求索不息

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

本文来自:http://www.cnblogs.com/zhuisha/archive/2010/03/12/1684022.html

 

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

(1):TagBuilder的方式

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

(3):HtmlTextWriter的方式

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

测试代码如下:

class 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.

posted on 2014-01-03 15:48  路漫漫,求索不息  阅读(324)  评论(0编辑  收藏  举报