微軟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;

七、其餘方法

提煉出可並行的處理,並改成線程;

增長內存的使用;

減小外部數據的存取次數;

利用編譯器選項優化

採用更快的算法;

相關文章
相關標籤/搜索