WHAT?

本章讨论程序性能调整问题。但是对用户来说,程序员按时交付软件,提供一个清爽的用户界面,避免系统经常死机常常比程序性能更加重要

WHY?

在程序设计这种文化中,编写出能够节省几微秒的代码可以证明你很酷--

HOW?

Pareto法则

即80/20法则,指你可以通过20%的努力获取80%的成果

一些无稽之谈

  • 在搞基高级语言中,减少代码行数可以加快代码执行速度
  • 特定运算可能比其他的更快,代码规模也较小:在某个环境下提升程序性能的方法放到另一个环境中可能会损害程序性能。在调整代码的时候你实际上隐含了一个承诺,即你将根据环境变化(包括编译器种类、版本、库版本的改变等)重新进行剖测和调整
  • 应当随时随地进行优化
  • 程序的运行速度同其正确性一样重要:在程序无法正确运行时,不可能去要求程序应当更小巧或运行更快

常见的低效率之源

  • 输入/输出操作:程序效率底下的根源之一就是不必要的输入/输出,优先在内存中处理文件,而不是磁盘、数据库或者网络
  • 分页:引发操作系统缺页中断(page faults)的运算会比在同一页的运算慢很多
  • 系统调用:调用系统子程序的代价是非常可观的,通常涉及系统的上下文切换(context switch)——保存程序状态、恢复内核状态等
  • 解释型语言:慢于编译型语言
  • 错误:比如数据库缺少索引

性能测量

  • 如果没有测量性能变化,那么你想当然的优化结果不过是代码变得更加晦涩难懂
  • 应当用分配给程序的cpu时钟来计算,而不是日期时钟
  • 应当明确测量程序初始化带来的额外系统负担

《Code Complete》ch.25 代码调整策略的更多相关文章

  1. 《Code Complete》ch.26 代码调整技术

    WHAT? 提高代码运行速度的方法,减少代码的资源占用 WHY? 这里提出的都是“可以尝试的”方法,有的或许在你的环境根本不起作用,有的则能实实在在产生很好的效果 HOW? Logic - 逻辑 在知 ...

  2. 重读 code complete 说说代码质量

    重读code complete 说说代码质量 2014年的第一篇文章本来计划写些过去一年的总结和新年展望,但是因为还有一些事情要过一阵才能完成,所以姑且不谈这个,说说最近重读code complete ...

  3. code complete part1

    最近在看code complete,学习了一些东西,作为点滴,记录下来. 关于类: 类的接口抽象应该一致 类的接口要可编程,不要对类的使用者做过多的假设.不要出现类似于:A的输入量一定要大于多少小于多 ...

  4. Code Complete 读后总结和新的扩展阅读计划

    Code Complete 读后总结和新的扩展阅读计划 用了一年时间终于将代码大全读完了,在这里做一个简单的总结,并安排下一阶段的扩展阅读计划. 1.选择代码大全作为我程序员职业入门的第一本书,我认为 ...

  5. VS Code使用Git管理代码

    Visual Studio Code(简称VS Code)是一个轻量级且强大的代码编辑器,后台是微软,支持Windows.Mac和Linux操作系统,拥有丰富的插件生态系统,可通过安装插件来支持C++ ...

  6. 史上最全学习率调整策略lr_scheduler

    学习率是深度学习训练中至关重要的参数,很多时候一个合适的学习率才能发挥出模型的较大潜力.所以学习率调整策略同样至关重要,这篇博客介绍一下Pytorch中常见的学习率调整方法. import torch ...

  7. 使用code标签获得类似代码段的效果

    几乎所有的浏览器都支持 code标签 code标签, 顾名思义,就是代码标签, imply tell browser, that 后面的部分是表示计算机代码. 因此, 浏览器可以根据自己的特点来显示这 ...

  8. 微软良心之作——Visual Studio Code 开源免费跨平台代码编辑器

    微软良心之作——Visual Studio Code 开源免费跨平台代码编辑器 在 Build 2015 大会上,微软除了发布了 Microsoft Edge 浏览器和新的 Windows 10 预览 ...

  9. 在IDE中用Bing Code Search直接查找代码片段并且插入

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在IDE中用Bing Code Search直接查找代码片段并且插入.

随机推荐

  1. scala中的=>符号的含义

    [声明]本帖的内容是copy来的,来源为stack overflow. It has several meanings in Scala, all related to its mathematica ...

  2. Hub, bridge, switch, router, gateway的区别

    这些概念性的东西,其实,有的区别不是很大,有的区别很大. Hub 就是一个重复转发器,就是从一个port接受到数据后,就会原样的向其他的所有端口发送刚才收到的数据.个人理解为是工作在物理层的东西.但是 ...

  3. windows p12(pfx)个人证书安装过程

    证书库个人证书存储区为其中的每个证书维护一个属性CERT_KEY_PROV_INFO_PROP_ID,该属性指定了证书对应的密钥容器的相关信息,包括密钥容器名,CSP名称,CSP类型,密钥用途,以及C ...

  4. 【设计模式】工厂方法模式(Factory Method)

    工厂方法模式 定义了一个创建对象的接口,但由子类决定要实现的类是哪一个.工厂方法让类把实例化推迟到子类.所有的工厂模式都用来封装对象的创建.工厂方法模式通过让子类决定改创建的对象是什么,来达到将对象创 ...

  5. Thinkpad X240修改bios引导方式

    来源:http://blog.csdn.net/jsship/article/details/19121149 修改笔记本的BIOS设置!这是非常重要的步骤之一.否则,你的U盘不能引导手提电脑进入PE ...

  6. [terminal]Terminal常用快捷键

    1. 终端操作 Ctrl+d/exit 退出当前Termina1   Ctrl+l/clear  清除屏幕  Ctrl+Alt+t/Ctrl+shift+n  打开新终端窗口  Ctrl+shift+ ...

  7. “代理 XP”组件已作为此服务器安全配置的一部分被关闭。解决方法

    新建维护计划的时候遇到下图的报错信息 标题: Microsoft SQL Server Management Studio------------------------------ “代理 XP”组 ...

  8. 黄聪:异步加载JS的4种方式(详解)

    方案1:$(document).ready <!DOCTYPE html> <html> <head> <script src="http://co ...

  9. (WCF) WCF Service Hosting.

    3 Options. 1. Host inside of an application. 2. Host into Windows service. 3. Host into IIS 参考: http ...

  10. Navicat(连接) -1高级设置

    高级设置 设置位置当创建一个新的连接,Navicat 将在设置位置创建一个子文件夹.大多数文件都保存在该子文件夹: Navicat 对象 服务器类型 扩展名 查询 全部 .sql 导出查询结果设置文件 ...