TagBuilder 性能如此低下?
本文来自: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 性能如此低下?的更多相关文章
- OpenXML性能真的低下吗?
博文NET导出Excel的四种方法及评测 中对比了4个库的导出性能,但对OpenXML的评价并不高,本人觉得不合理,所以我重新测试下性能 基于OpenXML的包装类 ExcelDownWorker p ...
- Kylin查询性能低下原因分析
在处理指数行情数据时(IDXD),我遇到一个KYLIN性能查询低下的问题,非常奇怪.经过一番研究发现了其中的原因并顺利解决: 症状: select count(*) from sensitop.idx ...
- SQL Server-聚焦IN VS EXISTS VS JOIN性能分析(十九)
前言 本节我们开始讲讲这一系列性能比较的终极篇IN VS EXISTS VS JOIN的性能分析,前面系列有人一直在说场景不够,这里我们结合查询索引列.非索引列.查询小表.查询大表来综合分析,简短的内 ...
- ASP.NET MVC之如何看待内置配置来提高性能优化(四)
前言 前几篇我们比较基础的讲了下MVC中的知识,这一节我们穿插点知识,讲讲MVC中我们可以提高性能的办法. Razor视图引擎优化(优化一) 我们知道默认情况下配置MVC去解析一个视图会首先约定通过查 ...
- 探讨js字符串数组拼接的性能问题
这篇文章主要介绍了有关js对字符串数组进行拼接的性能问题,字符串连接一直是js中性能最低的操作之一,应该如何解决呢?请参看本文的介绍 我们知道,在js中,字符串连接是性能最低的操作之一. 例如: 复制 ...
- mysql数据库性能优化(包括SQL,表结构,索引,缓存)
优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...
- MySQL 数据库性能优化之SQL优化
前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 ...
- MySQL性能优化的21个最佳实践 和 mysql使用索引
1. 为查询缓存优化查询 当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了. 2. EXPLAIN SELECT 查询 ...
- 机械硬盘与SSD固态硬盘性能的深度
从7200转硬盘升级到10000转的迅猛龙,那叫量变.从10000转的迅猛龙升级到SSD,这个叫质变.2者的差距是有些地方相当大,而有些却很接近,主要是难比较. 经常听到有人说:我买2个黑盘组RAID ...
随机推荐
- LRU Cache 解答
Question Design and implement a data structure for Least Recently Used (LRU) cache. It should suppor ...
- tomcat7 https 成功测试
1,生成证书
- PHP 9 大缓存技术总结
1.全页面静态化缓存 也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程.此种方式,在CMS系统中比较常见,比如dedecms: 一种比较常用的实现方 ...
- SVN:冲突解决 合并别人的修改
在项目中,基本不可避免多个人同时参与一个项目,因此就可能会出现多个人同时修改一个文件的情况,就不可避免的会出现冲突.svn已经很聪明了,如 果你和别人对于同一个文件的修改之间不存在重叠(比如你在文件最 ...
- Android 内部存储相关的函数(getCacheDir,getDir, getFileStreamPath,getFilesDir,openFileInput, ...)
为了保证应用程序存储数据的安全性,开发人员在开发应用程序的过程中须要注意使用Android 应用程序的内部存储空间. 依据不同的要求.将相应的数据文件.缓存文件.暂时文件等分别存储在相应的位置. 注意 ...
- 那么温暖http合约,入门。
简介 年提出.经过几年的使用与发展,得到不断地完好和扩展.眼下在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,并且HTTP-NG(Next Generation ...
- struts2 action重定向
struts2的结果类型: <action name="loginAction" class="com.itheima.action.LoginAction&quo ...
- LR如何利用siteScope监控MySQL性能
本次实验,是在自己的电脑上使用APMServ5.2.6部署Discuz2.X论坛下,对该论坛的数据库MySQL5.1进行性能测试的,下面讲述LoadRunner在设计场景时,如何利用siteScope ...
- webpack配合vue.js实现完整的单页面demo
本篇文章主要是我在开发前研究了webpack+vue.js的单页面应用,因为需要用到node的npm,所以确保安装了node,建议官网安装最新的稳定版本.并且在项目中需要加载一些npm包,由于npm的 ...
- C#入门(一):IDE
设计流程 .NET可视化对象 创建工程的时候,会创建三个文件 Form1.cs Form1.Designer.cs Program.cs 当增加一个控件的时候,会在Form1.Designer.cs增 ...