Farseer

DAX2012学习中......

导航

统计

应用程序性能优化

刚刚看了新一期的微软WebCast,感觉内容很宽泛,言之无物。

应用程序优化的方法论

1.设置应用程序的目标。即用户需要达到什么样的体验,如果从数据库重Load 10W条数据,就算是建立了最优秀的索引,设定置了最好的查询效果,也不会很快地在页面上显示出来,我想这样速度上的缺陷,用户也可以忍耐。但是用户每次看到的数据就只有20条,你后台每次Load出10W条,那就是你程序的问题了,这个可以在分页的时候延迟加载。好像跑题了。一般一个网页要在8S之内显示出来算是可以容忍。这也算是一种应用程序的目标,因为人的贪欲是无止境的,如果能无刷新的立刻显示出来,他当然更愿意了,在客户那边培训的时候,他们对页面刷新深恶痛绝,而这是b/s没办法的事,即使用xmlhttp可以解决部分问题。关键是要在技术实现成本和客户的需求之间取得一个平衡点。

2.测量,测量,再测量。反复测试,以便生成更优秀的代码。但是现在项目时间绝对不允许我们这样做,除非抽出专门的人力做这事。每天疲于奔命般地Coding,排的Schedule能完成业务逻辑就不错了,不用提效率的测试问题了。

3.了解应用程序的目标硬件和软件平台。这个很好理解,如果服务器的资源是无限的,我想程序优化的问题可以无限期延后了。

讲了几个测试工具,主要讲了一个Intel的一个性能测试工具,不知所言。

.Net程序的优化
1.字符串处理性能,在做字符串相加操作的时候,最好用System.Text命名空间下的StringBuilder下实例的Append()方法,因为用字符串相加时会出现反复生成和销毁string对象的操作,这样性能会下降很多。这个好像很多地方都有提到。
 
2.垃圾收集。.net的垃圾收集还是比较高效的。只是很多稀有资源要及时手动关闭。虽然.net也能够关闭但无法预知他关闭的时机。对于稀有资源,用完就关闭是非常必要的

3.异常处理。异常处理在进入catch处理块时要要遍历整个堆栈,然后把异常抛给用户,这样的效率是很低的,所以不要用try catch来控制程序的走向。

高效率代码跟优秀的代码之间存在矛盾。这里优秀的代码是指架构设计优良,可扩展性强的代码。比如跨平台的代码,比如完全面向对象的代码,这些代码由于要考虑到系统的扩展性和兼容性,势必影响到代码的效率。比如微软给连接SQL Server数据库专门设计了SqlClient,可是如果用这个命名空间就没办法跨数据库了。

效率和系统的扩展性,也许只有在硬件条件无限的情况下,不用考虑效率,系统的扩展性就可以放心地考虑了。当然目前我能想到的做法应该还没有影响效率的程度,我的思考空间现在还非常的狭小,小到还不至于影响系统设计的程度。

posted on 2005-02-22 21:23 佛西亚 阅读(...) 评论(...) 编辑 收藏