本文来自: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();
}
}
}

第一次测试结果:

第二次测试结果:

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

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

TagBuilder 性能如此低下?的更多相关文章

  1. OpenXML性能真的低下吗?

    博文NET导出Excel的四种方法及评测 中对比了4个库的导出性能,但对OpenXML的评价并不高,本人觉得不合理,所以我重新测试下性能 基于OpenXML的包装类 ExcelDownWorker p ...

  2. Kylin查询性能低下原因分析

    在处理指数行情数据时(IDXD),我遇到一个KYLIN性能查询低下的问题,非常奇怪.经过一番研究发现了其中的原因并顺利解决: 症状: select count(*) from sensitop.idx ...

  3. SQL Server-聚焦IN VS EXISTS VS JOIN性能分析(十九)

    前言 本节我们开始讲讲这一系列性能比较的终极篇IN VS EXISTS VS JOIN的性能分析,前面系列有人一直在说场景不够,这里我们结合查询索引列.非索引列.查询小表.查询大表来综合分析,简短的内 ...

  4. ASP.NET MVC之如何看待内置配置来提高性能优化(四)

    前言 前几篇我们比较基础的讲了下MVC中的知识,这一节我们穿插点知识,讲讲MVC中我们可以提高性能的办法. Razor视图引擎优化(优化一) 我们知道默认情况下配置MVC去解析一个视图会首先约定通过查 ...

  5. 探讨js字符串数组拼接的性能问题

    这篇文章主要介绍了有关js对字符串数组进行拼接的性能问题,字符串连接一直是js中性能最低的操作之一,应该如何解决呢?请参看本文的介绍 我们知道,在js中,字符串连接是性能最低的操作之一. 例如: 复制 ...

  6. mysql数据库性能优化(包括SQL,表结构,索引,缓存)

    优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...

  7. MySQL 数据库性能优化之SQL优化

    前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 ...

  8. MySQL性能优化的21个最佳实践 和 mysql使用索引

    1. 为查询缓存优化查询 当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了. 2. EXPLAIN   SELECT 查询 ...

  9. 机械硬盘与SSD固态硬盘性能的深度

    从7200转硬盘升级到10000转的迅猛龙,那叫量变.从10000转的迅猛龙升级到SSD,这个叫质变.2者的差距是有些地方相当大,而有些却很接近,主要是难比较. 经常听到有人说:我买2个黑盘组RAID ...

随机推荐

  1. PHP安装和配置

    编译安装php5-5.2.6-49.11.src.rpm: ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin ...

  2. Unity 飞机的子弹轨迹

    最近公司在开发一款儿童打飞机游戏.  策划跟我说能在子弹上加上一些轨迹就好了.  比如 旋转 左右移动呀.然后它就很愉快的跑去截其他游戏的图啦... 我看见图的时候, 解决方案: 1.   使用牛逼的 ...

  3. Vanya and Scales(思维)

    Vanya and Scales time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  4. strcpy与memcpy的区别

    strcpy和memcpy的区别 strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制 ...

  5. 从头开始——重装ubuntu

    一.装系统 环境:计算机原本装的系统是windows7+ubuntu 14.04,后来ubuntu的启动项被我手贱破坏了,进不了ubuntu,只能重新安装. 启动盘:使用UltraISO软碟通制作U ...

  6. linux中curl命令

    linux curl是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称url为下载工具. 一,curl命令参数,有好多我没有用过,也不知道翻 ...

  7. putty保持连接不自动段开

    经常在网上看到有人说自己利用putty工具登录服务器总是连接不上,这样的情况自己在刚接触putty时也遇到过.在 Connection 里面有个 Seconds between keepaliaves ...

  8. VLC源码分析知识总结

    1.  关于#和## 1.1).在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号. 比如在早 ...

  9. java-随学随记之基础篇

    一.Java是一门高级语言,具有跨平台性(一次编译到处运行) 1.javac.exe命令,编译器   javac 源文件名.java 2.java.exe命令,启动虚拟机 java 类名 二.环境变量 ...

  10. 链接<a href="javascript:void(0)" />

    1.<a href="#"></a>——点击链接后,页面会向上滚到页首,# 默认锚点为 #TOP 2.<a href="javascript ...