zoukankan      html  css  js  c++  java
  • 应用程序性能优化

    刚刚看了新一期的微软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,可是如果用这个命名空间就没办法跨数据库了。

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

  • 相关阅读:
    扫面线模板
    (动态规划、栈)leetcode 84. Largest Rectangle in Histogram, 85. Maximal Rectangle
    tmux 常见命令汇总
    leetcode 221
    leetcode 319 29
    (贪心)leetcode 392. Is Subsequence, 771. Jewels and Stones, 463. Island Perimeter
    leetcode 982 668
    Python import 同文件夹下的py文件的函数,pycharm报错
    Windows里Anaconda-Navigator无法打开的解决方案
    Windows下 gpu版 Tensorflow 安装
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/107696.html
Copyright © 2011-2022 走看看