关于性能比较的应用误区

今天周末,就不写太长的文章了,刚不小心看了篇性能比较的文章,有感而就写了此篇。

 

这年头,好多人都对性能比较产生了兴趣,然后就开始写比较示例,之后就得出了一个正确但误导新手的误区。

 

本文不是性能比较文章,只说说观点,没有具体的测试数据,相关的性能比较文篇,园子里一搜,都是一堆一堆的。

 

这里举较常见的说:

1:string和StringBuilder

2:反射和Emit

3:==和String.Equals

 

通常比较都怎么比?








1:写个测试示例



2:for它个10万百万次



3:看输出时间



4:得出结论










 

结论与“推荐”

后者速度比前者速度快了N倍,然后就开始“推荐”使用后者。

很多学者爱看比较性文章,然而内容他不看,就看“推荐”两字。

然后就盲目“推荐”给自己和周围的人士。

 

广泛“推荐”及人推人之后的现象








于是现在看很多人的代码,都喜欢:



动不动就来个Stringbuilder。



动不动就来下Emit。



动不动就来次String.Equals。










 

看文章请认准性能临界点








什么是临界点,下面是一个精略的估算次数:



600次循环之前,string比StringBuilder快。



500次循环之前,反射比Emit快。



90000000的循环,才换来:1.6392576秒和1.1163117秒间46.675%的性能差别。










 

应用应该看场景





别动不动就在StringBuiler,或以砖家的身份还在嫌人家的string+="xxx"慢。



别动不动就在Emit,虽然写Emit是个相对难以理解和编写的。



别动不动就在String.Equals,难道你的代码真会循环9千万次?







 

简单说句是什么?



认准你的代码的应用场景,是否会产生大于N百次的临界点,再决定使用哪个。



 

再简单?








通常你的string循环不会超过600次,老实的用string+=“”。



通常你的List<T>的集合不会超过500条,老实的用反射。



通常你的==没什么问题,该用就用。



其它提示:object对象比较时,记得该用object.Equals。










 

本文就到此结束了,欢迎有感者留言。

 

附加:

最近发布了:CYQ.Data 数据框架 V4.5版本,欢迎收看与使用。

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2011/05/08/2040294.html

时间: 2025-01-20 12:14:28

关于性能比较的应用误区的相关文章

关于提高Oracle数据库性能的四个误区

为了提高性能,我们针对Oracle数据库本身提供了的方法或方案进行过不少的尝试,主要包括: 共享服务器模式(MTS): 集群技术(Clustering)RAC: 分区: 并行处理(主要是并行查询). Oracle提供的这些特性确实是用来进行性能改善的,但我们往往忽略了对自身应用特性的分析,它们是否适合于我们.最近,通过对这方面知识的深入了解,发现我们以前存在一些错误的认识.我觉得有必要,大家一起来改变这种误解. 分析之前,先明确一下我们的应用特性.数据库应用大体可以分为OLAP和OLTP两大类,

服务器的使用误区及如何正确使用

服务器 服务器是至关重要的核心设备,确保网络服务器能够高性能.稳定持续的工作一直以来都是用户最关心的问题.然而在关注着这个问题的同时,我们发现有很多的用户都没有正确地配置自己的服务器,使得服务器并没有工作在最佳的状态.通常服务器配置的常见误区表现在以下的几个方面. 服务器使用上的误区 误区之一:服务器带有冗余功能而不用 很多的高性能的服务器都提供了阵列功能,但是由于用户不了解,只购买一块硬盘,没有数据冗余,失去了对于存储方面的安全保障和性能优化 误区之二:高档服务器使用低配置方案 用户购买的高档

前端性能优化(三)——传统 JavaScript 优化的误区

注:本文是纯技术探讨文,无图无笑点,希望您喜欢 一.前言 软件行业极其缺乏前端人才这是圈内的共识了,某种程度上讲,同等水平前端的工资都要比后端高上不少,而圈内的另一项共识则是--网页是公司的脸面! 几年前,谷歌的一项统计表明,如果亚马逊页面加载每慢 100ms,将影响他们 1% 的收入:如果谷歌页面加载慢 500ms,流量将锐减 20%,这个数据现在必将更加恐怖! 在前端高性能优化(一).(二)中,笔者介绍了一些关于前端优化的技术,这些技术都依赖于前人的辛苦努力,但我们仍要明白的是,前端的情况十

SQL Server误区30日谈 第9天 数据库文件收缩不会影响性能_MsSql

误区 #9: 数据库文件收缩不会影响性能 错误!         收缩数据库文件唯一不影响性能的情况是文件末尾有剩余空间的情况下,收缩文件指定了TruncateOnly选项.     收缩文件的过程非常影响性能,这个过程需要移动大量数据从而造成大量IO,这个过程会被记录到日志从而造成日志暴涨,相应的,还会占去大量的CPU资源.     不仅在收缩的过程中影响性能,并且在文件收缩之后同样影响应能,收缩产生的大量日志会被事务日志传送,镜像,复制能操作重复执行.而空间不够时,文件还需要填0初始化从而影

性能测试新手误区(五):如何提出一个好的性能问题

性能测试新手误区(一):找不到测试点,不知为何而测 性能测试新手误区(二):为什么我模拟的百万测试数据是无效的? 性能测试新手误区(三):用户数与压力 性能测试新手误区(四):一切来自录制 经常会见到新人提出这样的性能问题: "100用户时,A操作响应时间达到了XX秒,请修改." 面对这样的问题,开发人员一定会觉得很无助,他们甚至不知道问题是什么. 即使从测试人员的角度来看,这也算不上是一个合格的问题. 那么一个好的性能问题应该是什么样呢? 好问题要描述清晰 100个用户,是指绝对并发

《Oracle数据库性能优化方法论和最佳实践》——1.7 Oracle性能优化的神话和误区

1.7 Oracle性能优化的神话和误区 Oracle性能优化工作是Oracle数据库科学最为神秘莫测的领域,自然也就会流传着各种传言和八卦.本书最主要的目的就是真正使Oracle性能优化成为一门严谨的科学,使任何阅读并且理解本书内容的读者可以比较简单地完成Oracle性能优化工作,使自己在其他人面前成为"巫师"或"神秘的对象".1.7.1 艺术和科学 从百度.Google等网站搜索"性能优化艺术",会出现大量的条目,部分Oracle性能优化的图

Sql Server 查询性能优化之走出索引的误区分析_MsSql

据了解绝大多数开发人员对于索引的理解都是一知半解,局限于大多数日常工作没有机会.也什么没有必要去关心.了解索引,实在哪天某个查询太慢了找到查询条件建个索引就ok,哪天又有个查询慢了,再建立个索引就是,或者干脆把整个查询SQL直接发给DBA,让DBA直接帮忙优化了,所以造成的状况就是开发人员对于索引的理解.认识很局限,以下就把我个人对于索引的理解及浅薄认识和大家分享下,希望能解除一些大家的疑惑,一起走出索引的误区 误区1.在表上建立了索引,在查询时用到了索引的列,索引就一定会生效 首先明确下这样的

分析Sql Server查询性能优化之走出索引的误区

误区1.在表上建立了索引,在查询时用到了索引的列,索引就一定会生效 首先明确下这样的观点是错误的,SQL Server查询优化器是基于开销进行选择的优化器,通过一系列复杂判断来决定是否使用索引.使用什么类型索引.使用那个索引.SQL Server内部维护着索引列上的数据的统计,统计信息会随着索引列内容的变化而变化,索引的有效期完全取决于索引列上的统计信息,随着数据的变化关于索引的检索机制也随之变化.对于查询优化器来说始终保持查询开销最低始终是其的不二选择,如果一个非聚集索引的列上有大量的重复值,

SQL Server误区30日谈 第9天 数据库文件收缩不会影响性能

误区 #9: 数据库文件收缩不会影响性能 错误! 收缩数据库文件唯一不影响性能的情况是文件末尾有剩余空间的情况下,收缩文件指定了TruncateOnly选项. 收缩文件的过程非常影响性能,这个过程需要移动大量数据从而造成大量IO,这个过程会被记录到日志从而造成日志暴涨,相应的,还会占去大量的CPU资源. 不仅在收缩的过程中影响性能,并且在文件收缩之后同样影响应能,收缩产生的大量日志会被事务日志传送,镜像,复制能操作重复执行.而空间不够时,文件还需要填0初始化从而影响性能(除非你开启的不用填零初始