摘要:
查看《软件开发性能优化系列》目录 异常也是现代语言的典型特征。与传统检查错误码的方式相比,异常是强制性的(不依赖于是否忘记了编写检查错误码的代码)、强类型的、并带有丰富的异常信息(例如调用栈)。 1、不要吃掉异常 关于异常处理的最重要原则就是:不要吃掉异常。这个问题与性能无关,但对于编写健壮和易于排错的程序非常重要。这个原则换一种说法,就是不要捕获那些你不能处理的异常。例如:private voi... 阅读全文
摘要:
1、 避免无意义的变量初始化动作 CLR保证所有对象在访问前已初始化,其做法是将分配的内存清零。因此,不需要将变量重新初始化为0、false或null。//Generally expert 10 or less itemsprivate HashTable _items = null;private NameValueCollection = _queryString = null;private... 阅读全文
摘要:
1、 线程同步 线程同步是编写多线程程序需要首先考虑问题。C#为同步提供了 Monitor、Mutex、AutoResetEvent 和 ManualResetEvent 对象来分别包装 Win32 的临界区、互斥对象和事件对象这几种基础的同步机制。C#还提供了一个lock语句,方便使用,编译器会自动生成适当的 Monitor.Enter 和 Monitor.Exit 调用。 a)、同步粒度 同步粒度可以是整个方法,也可以是方法中某一段代码。为方法指定 MethodImplOptions.Synchronized 属性将标记对整个方法同步。例如:[MethodImpl(MethodImplO. 阅读全文
摘要:
1、使用StringBuilder做字符串连接 string是不变类,使用+操作连接字符串会导致创建一个新的字符串。如果字符串连接次数不是固定的,例如在一个循环操作中,则应该使用StringBuilder类来做字符串连接工作。因为StringBuilder内部有一个StringBuffer,连接字符操作不会每次分配新的字符串空间。只有当连接后的字符串超出Buffer大小是,才会申请信的Buffer... 阅读全文
摘要:
《软件开发性能优化系列》目录 垃圾回收时现代语言的标志之一。垃圾回收解放了手工管理对象释放的工作,提高了程序的健壮性,但是副作用就是程序代码可以对于创建对象变得随意。1、避免不必要的对象创建 由于垃圾回收的代价较高,所以C#程序开发要遵循的一个基本原则就是避免不必要的对象创建。以下列举一些常见的情型。a)、避免循环创建对象 如果对象并不会随每次循环改变而改变状态,那么在循环中反复创建对象将带来性... 阅读全文
摘要:
一、SQL拼写建议1、查询时不返回不需要的行、列 业务代码要根据实际情况尽量减少对表的访问行数,最小化结果集,在查询时,不要过多地使用通配符如:select * from table1语句,要用到几列就选择几列,如:select col1,col2 from table1;在可能的情况下尽量限制结果集行数如:select top 100 col1,col2,col3 from talbe2,因为某... 阅读全文
摘要:
1、参数化sql 对于一般简单查询,数据库能自动参数啊以重用计划缓存,如:SELECT * FROM table WHERE id=1;SELECT * FROM table WHERE id=4 在sqlserver内部能自动参数化这个查询,SELECT * FROM table WHERE id=@1 但是一旦sql语句中带有join、union、top……等关键字... 阅读全文
摘要:
目前主流的开发语言有3种:php、asp.net、jsp。下面从我的角度来说一下我对这三种语言的评价……………… 阅读全文
摘要:
死锁原因: 死锁是由两个相互阻塞的线程组成,它们互相等待对方完成,一般死锁情况下两个数据库事务之间存在着相反的操作。sqlserver中死锁监视器定时检查死锁,如果发现死锁,将选择其中回滚消耗最小的任务,这时候发生1025数据库错误。可以通过启用sqlserver2005快照模式,避免一些读/写的逆向阻塞造成的死锁.但是对于一些写/写阻塞的死锁可能无法解决,很多时候需要从业务的角度来避免一些写/写... 阅读全文
摘要:
阻塞原因 在默认事务隔离情况下,数据库事务越长,一方面独占锁被持有的时间越长,写操作阻塞读操作的机会就越多;另一方面,在默认的读提交隔离模式下,读操作使用共享锁与独占锁不兼容,读操作也会阻塞写操作。 阻塞也是死锁产生的基本条件,改善了阻塞就能有效减少死锁。 在软件开发后期,在对大数据量的集成测试工程中,通过活动查看器可以观察到阻塞情况,主要产生阻塞的原因就是读和写相互阻塞在对同一个大表的操作上。因... 阅读全文
摘要:
无主键、索引或者没有查询索引无效,是产品查询慢的最常见问题,以下是数据库表主键和索引设计的主要原则1、主键主键ID,主键既是约束也是索引,同时也用于对象缓存的键值。2、索引 *组合或者引用关系的子表(数据量较大的时候),需要在关联主表的列上建立非聚集索引(如订单明细表中的产品ID字段、订单明细表中关联的订单ID字段) *索引键的大小不能超过900个字节,当列表的大小超过900个字节或者若干列的和超过900个字节时,数据库将报错。 *表中如果建有大量索引将会影响INSERT、UPDATE和DELETE语句的性能,因为在表中的数据更改时,所有的索引都将必须进行适当的调整。需要避免对经常更新的表进. 阅读全文
摘要:
树表设计: 树状表都是使用ID和IDParent两个字段来表示树关系。对树进行查找只能使用自关联方式,不光写法麻烦而且记录多的时候查询性能会非常差。建议在设计树表的时候可以考虑加入treePath字段,记载到该节点记录需要经历的树路径。虽然会增加Insert和Update的成本。但是对查询树关系非常有帮助。可以避免大部分的自关联查询。分区表: 记录超过一百万的表要考虑是否需要使用分区表。对于能够明... 阅读全文
摘要:
一、数据库性能1、表设计2、主键、索引设计3、阻塞4、死锁5、SQL查询性能优化(一)6、SQL查询性能优化(二)二、C#语言1、垃圾回收2、String操作3、多线程4、类型系统5、异常处理6、反射7、基本代码技巧三、ADO.NET1、应用ADO.NET的一些思考原则2、Connection3、Command4、DataReader5、DataSet四、Asp.net1、减少往返进程2、避免阻塞... 阅读全文
摘要:
由于最近比较忙,没有太多的时间来整理我的电子商务项目,所以暂缓本系列的问题。如有疑问也欢迎大家给我留言或者邮件。 阅读全文
摘要:
上一篇内容已经确定了我们开发电子商务需要的技术,本节将介绍开发大型电子商务所需要达到的技术目标,实现电子商务网站的高速、高并发、高负载、高稳定性、高扩展性、SEO高收录等等一系列问题。因为个人能力有限,不可能考虑周到,望大家给予补充和指正建立大型的电子商务网站,不可或缺需要有很多功能和用到很多技术。在此我将介绍一下我所了解的可能需要实现的功能和用到的技术。1、页面的HTML静态化 页面静态化有以下... 阅读全文
摘要:
上周,我参加了由微软中国移动与通信事业部组织的WindowsMobile合作伙伴大会。会上有一个非常有意思的讨论环节,面对目前竞争日益激烈的智能手机市场,无论是OEM还是ODM都使尽浑身解数制造更先进的设备、更好的体验给消费者。那么,五年后的WindowsMobile将是什么样子?将会有哪些新功能?将会带给用户哪些新的体验?我与参会的十位同行组成了红组,针对这一话题进行了激烈研讨,每个人... 阅读全文
摘要:
SQLServer查询最近一天,三天,一周,一月,一季度方法 阅读全文
摘要:
1. 用IN来替换OR 下面的查询可以被更有效率的语句替换: 低效: SELECT field1, field1 FROM LOCATION WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30 高效 SELECT field1, field1 FROM LOCATION WHERE LOC_IN IN (10,20,30) ... 阅读全文
摘要:
表设计和查询的一些参考 1.合理使用索引 索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。索引的使用要恰到好处,其使用原则如下: ●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。 ●在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。 ●在条件... 阅读全文