微软2013校招题如何提升程序的执行速度

参考:浅谈如何提升程序的执行速度 前端

1、代码的优化级别 程序员

一、算法级 算法

一个好的算法可使用少许代码实现复杂操做,比较难,算法常常与负载的状态有关,因此须要比较和测试 数据库

二、语言级 编程

采用较少高级语言代替冗长的好比使用临时的指针代替多级的成员读写,把某些赋值语句放到多重循环的外面,使用inline函数,使用指针或引用代替结构复制(形参),使用指针移动代替内存拷贝,把初始化操做放在一开始而不是循环之中,减小须要执行的语句就是提升速度的最直接的方法。 数组

三、指令级 网络

所用的语言通常是汇编语言,调试和测试比较复杂, 多线程

如何优化?影响速度的缘由 函数

一、程序设计不合理: 性能

1)需求:系统须要处理的最大数据是多少?系统能接受的速度级别是?2)根据系统的需求,列出能够并行处理的部分,考虑并行处理的方式,好比是否用线程处理等等等。(多线程和并行处理 )3)减小应用于外部系统间的通讯量,优化通讯协议。包括应用与数据库的交互;应用与网络的交互等。

二、慎重使用循环语句

1)循环不变,表达式外提;

如计算半径为r的从10到360的扇形面积;

for(n=1;n<36;n++)
{
S=10/360*pi*r*t;
printf("Area is %f",S);
}
//改成
C=10/360*pi*r*r;
for(n=1;n<36;n++){
S=C*n;
printf("Area is %f",S);
}
2)概括变量删除;3)计算强度消减;(参考编译原理)

3.输出的问题

程序输出语句,不论是输出到屏幕,向文件输出,仍是打印,速度都比通常的语句慢不少。

当你的系统很慢的时候,能够先看看是否打印了太多的调试信息或其余无用信息到屏幕。

对文件的操做,须要提到的是:

1)一次将文件读入到缓冲区内,通常要比按行读入或是按字节读入快得多;

2)若是程序中须要屡次读入一个文件,而读写文件的速度过低以至成为系统的瓶颈,不放在程序开始的时候将程序读入缓冲区内,将对文件的存取操做改成对内存的存取操做,速度会提升不少。

四、字符串处理

在用C++编程时,程序员喜欢用系统提供的字符串类型,方便程序处理,可是在方便的同时这些类的共同缺点是处理速度太慢。当要处理大量字符串的时候,仍是用最基本的字符数组char[]更好。

五、尽量使用常数

若是代码中的字符串或数字是不变的,则应该把他们声明为常数。常数在编译时进行处理,编译程序用适当的值替换代码中的常量,而变量是在每次运行时都要读取当前值的。

六、提高数据库应用的性能

对于数据库操做(insert\delete\update\select等)通常速度较慢,尤为数据库中有大量数据的时候,

1)尽可能使用存储过程

尤为在C/S的三层结构应用中,将尽量多的SQL语句改成存储过程,减小网络间的数据传输和北极的工做,即便使用本地收库,全部应用和数据处理都在同一台计算机,数据库和应用之间的大数据量交换也很是慢。

2)在建立数据库前端应用以前,数据库中要有充分多的数据

3)充分利用SQL语句中已经提供的方法,精良减小结果集的返回。

求某字段平均值,并返回结果。

select field from table1;
for(int i=0;i<记录数目;i++)
{
   sun+=当前字段值;
   移动到下一条记录;
}
average = sum/记录数;
以上方法在数据库记录不少时运行速度很慢;
select (avg(field))avgresult form table
average = avgresult;

七、其余方法

提炼出可并行的处理,并改成线程;

增长内存的使用;

减小外部数据的存取次数;

利用编译器选项优化

采用更快的算法;

相关文章
相关标签/搜索