应用程序性能优化
2005-02-22 21:23
281 查看
刚刚看了新一期的微软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,可是如果用这个命名空间就没办法跨数据库了。
效率和系统的扩展性,也许只有在硬件条件无限的情况下,不用考虑效率,系统的扩展性就可以放心地考虑了。当然目前我能想到的做法应该还没有影响效率的程度,我的思考空间现在还非常的狭小,小到还不至于影响系统设计的程度。
应用程序优化的方法论
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,可是如果用这个命名空间就没办法跨数据库了。
效率和系统的扩展性,也许只有在硬件条件无限的情况下,不用考虑效率,系统的扩展性就可以放心地考虑了。当然目前我能想到的做法应该还没有影响效率的程度,我的思考空间现在还非常的狭小,小到还不至于影响系统设计的程度。
相关文章推荐
- 优化ASP.NET应用程序性能研究与探讨
- 也谈ASP.NET应用程序性能优化
- [C++应用程序性能优化]动态数组——摄像机
- ASP.NET 应用程序性能优化
- C++应用程序性能优化之内存池
- WP7 App性能优化(12):检测应用程序性能(Ⅴ)
- 优化ASP.NET应用程序性能研究与探讨
- Android应用程序性能优化
- 全面优化ASP应用程序的性能(转载)
- 开发高Web应用程序常用优化性能的技巧
- ios 性能优化之定位应用程序的内存问题
- C++ 应用程序性能优化,第 6 章:内存池
- C++ 应用程序性能优化
- C++ 应用程序性能优化 -- 内存池
- 优化ASP.NET应用程序性能研究与探讨
- 数据库优化与应用程序性能的五个平衡点
- 一个优秀的Java程序员必须了解GC的工作原理、如何优化GC的性能、如何与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统、实时系统等,只有全面提升内存的管理效率,才能提高整个应用程序
- Asp.net性能优化-提高ASP.Net应用程序性能的十大方法
- Asp.net性能优化-提高ASP.Net应用程序性能的十大方法 (转)
- ASP.NET 应用程序性能优化