實驗背景:
1、前一段時間,在與老師共同開發的程序中,老師提出了少用函式,函式會造成所開發系統的性能的損失,對于這一點,我是贊同的,但同時覺得造成的系統性能的損失應該也是很微下的,因此,有了本次的實驗,
2、本次實驗將會從java、C++、python、瀏覽器運行js腳本和jvm中運行js腳本,四種如今流行的編程語言,五種方式,來比對對一個數做10億次加法,使用函式和不使用函式的時間差異,由于本次為實驗,為了方便闡述實驗結果,因此,實驗的代碼和截圖部分同一放在博客的后半部分,
1、java語言性能比較

由實驗資料可以得出:在十億次對一個數自增操作下,使用函式的確會降低系統的性能,但是影響并不是很大,因此用java語言在實際開發中并不是很需要關心定義函式會明顯的影響系統性能,
2、C++語言性能比較

由實驗資料可得:在C++中,使用函式會比不使用函式進行呼叫效率高,并且使用行內函式的確能夠少幅度的提升系統性能,至于為什么以速度見稱的C++語言在執行10億次自增操作還需2s鐘以上的時間就不清楚了,
3、python語言性能比較(由于實驗程序中python語言的執行效率太低了,因此實驗的回圈次數為1億,節約等待的時間)

由實驗資料可得:在python語言中,不使用函式比使用函式在執行速度上有著顯著的區別,因此在python語言進行開發時,應盡量減少函式的使用,同時,如果開發對系統性能有較高要求的軟體,使用python語言可能并不是一種明智的選擇,
4、js代碼在瀏覽器中運行的性能比較

由實驗資料可得:js代碼在瀏覽器中執行10億次自增操作速度還相對較快,雖然頻繁的使用函式會有少許的性能影響,但是影響并不大,
5、js腳本在java虛擬機中運行的性能比較

由實驗資料可得:js腳本在jvm中運行,使用函式比不使用函式還是有著一定的性能差距,同時,js代碼在jvm中的運行普遍較慢,因此在java開發中要慎重的使用js腳本,
6、總結:
在本次的實驗中:各語言的執行效率 java > js在瀏覽器中執行 > C++ > js在jvm中執行 > python
同時,頻繁的使用函式的確會造成少許的執行效率的損失,但是對于大多數語言(python除外),其速度差異并不是很明顯,因此在開發中要根據不同編程語言的特點進行合理的使用,
下面將會貼出本次實驗各個語言的實驗代碼和首次運行的實驗截圖
7、java
package com.xgp.company;
public class Main {
private static int count = 0;
public static void main(String[] args) {
long start = System.currentTimeMillis();
// System.out.println(start);
for(int i = 0;i <= 999999999;i++) {
count++;
}
long end = System.currentTimeMillis();
System.out.println("未使用函式自增10 0000 0000次的時間:" + (end - start) + "ms");
count = 0;
System.out.println("==========================");
start = System.currentTimeMillis();
for(int i = 0;i <= 999999999;i++) {
method();
}
end = System.currentTimeMillis();
System.out.println("使用函式完成10 0000 0000次自增的時間:" + (end - start) + "ms");
}
private static void method() {
count++;
}
}

8、C++
#include <iostream>
#include <windows.h>
using namespace std;
int count = 0;
void method();
inline void fun();
int main() {
SYSTEMTIME st = { 0 };
GetLocalTime(&st);
long start = st.wHour*60*60*1000 + st.wMinute*60*1000 + st.wSecond*1000 + st.wMilliseconds;
for(int i = 0;i <= 999999999;i++) {
count++;
}
GetLocalTime(&st);
long end = st.wHour*60*60*1000 + st.wMinute*60*1000 + st.wSecond*1000 + st.wMilliseconds;
cout<<"未使用函式自增10 0000 0000次的時間:"<<end-start<<"ms"<<endl;
count = 0;
cout<<"=============================="<<endl;
GetLocalTime(&st);
start = st.wHour*60*60*1000 + st.wMinute*60*1000 + st.wSecond*1000 + st.wMilliseconds;
for(int i = 0;i <= 999999999;i++) {
method();
}
GetLocalTime(&st);
end = st.wHour*60*60*1000 + st.wMinute*60*1000 + st.wSecond*1000 + st.wMilliseconds;
cout<<"使用函式完成10 0000 0000次自增的時間:"<<end-start<<"ms"<<endl;
count = 0;
cout<<"=============================="<<endl;
GetLocalTime(&st);
start = st.wHour*60*60*1000 + st.wMinute*60*1000 + st.wSecond*1000 + st.wMilliseconds;
for(int i = 0;i <= 999999999;i++) {
fun();
}
GetLocalTime(&st);
end = st.wHour*60*60*1000 + st.wMinute*60*1000 + st.wSecond*1000 + st.wMilliseconds;
cout<<"使用行內函式完成10 0000 0000次自增的時間:"<<end-start<<"ms"<<endl;
return 0;
}
void method() {
count++;
}
inline void fun() {
count++;
}

9、python
import time
count = 0
t = time.time()
start = int(round(t * 1000))
for i in range(99999999):
count += 1
t = time.time()
end = int(round(t * 1000))
print("未使用函式自增1 0000 0000次的時間:",end-start,"ms")
count = 0
print("===============================================")
def method():
global count
count += 1
t = time.time()
start = int(round(t * 1000))
for i in range(99999999):
method()
t = time.time()
end = int(round(t * 1000))
print("使用函式完成1 0000 0000次自增的時間:",end-start,"ms")

10、js在瀏覽器中運行的代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var count = 0;
let start = new Date().getTime();
for(var i = 0;i <= 999999999;i++) {
count++;
}
let end = new Date().getTime();
console.log("未使用函式自增10 0000 0000次的時間:" + (end -start) + "ms");
count = 0;
console.log("================================================")
start = new Date().getTime();
for(var i = 0;i <= 999999999;i++) {
method();
}
end = new Date().getTime();
console.log("使用函式完成10 0000 0000次自增的時間:" + (end -start) + "ms");
function method() {
count++;
}
</script>
</body>
</html>

11、js腳本在jvm中運行的代碼
var count = 0;
var start = new Date().getTime();
for(var i = 0;i <= 999999999;i++) {
count++;
}
var end = new Date().getTime();
print("未使用函式自增10 0000 0000次的時間:" + (end -start) + "ms");
count = 0;
print("================================================")
start = new Date().getTime();
for(var i = 0;i <= 999999999;i++) {
method();
}
end = new Date().getTime();
print("使用函式完成10 0000 0000次自增的時間:" + (end -start) + "ms");
function method() {
count++;
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/90029.html
標籤:其他
下一篇:學習災難
