程式語言的速度僅供參考,效能往往取決於譯器而非語言本身
系統環境:
- 作業系統:Windows10,64位元
- CPU:intel i7 9700
- Java:cmd
- JavaScript:Chrome
- C++:Visual Studio 2019
- C#:Visual Studio 2019
- Python:Spider
比較:各語言的IO效能
程式碼:
JAVA
- for (var i=0;i<10000;i++)System.out.print(1);
- for (var i=0;i<10000;i++)console.log(1);
- for(int i=0;i<10000;i++) std::cout << 1;
- for (int i = 0; i < 10000; i++) Console.Write(1);
- for i in range(10000):
- print(1)
執行時間(單位:毫秒)
Java | 130 |
JavaScript | 73 |
C++ | 176 |
C++(最佳化) | 129 |
C# | 136 |
C#(最佳化) | 132 |
Python | 142 |
=================
比較:各語言的一維陣列/串列填充效能
程式碼:
JAVA
- for (var i=0;i<1000000;i++)arr[i]=i;
- for (var i=0;i<1000000;i++)arr[i]=i;
- for (int i = 0; i < 1000000; i++)
- number[i]=i;
- for (int i = 0; i < 1000000; i++) number[i]=i;
- for i in range(1000000):
- list0[i]=i
執行時間(單位:毫秒)
Java | 2 |
JavaScript | 6 |
C++ | 2 |
C++(最佳化) | 2 |
C# | 4 |
C#(最佳化) | 2 |
Python | 98 |
=============================
比較:各語言的串列新增效能
程式碼:
JAVA
- for (int i = 0; i < 1000000; i++) st.push(i);
- for (var i=0;i<10000000;i++)list.push(i);
- for (int i = 0; i < 1000000; i++)
- mystack.push(i);
- for (int i = 0; i < 1000000; i++) myStack.Push(i);
- for i in range(1000000):
- list0.append(i)
執行時間(單位:毫秒)
Java | 20 |
JavaScript | 135 |
C++ | 690 |
C++(最佳化) | 12 |
C# | 59 |
C#(最佳化) | 59 |
Python | 94 |
========================
比較:各語言的遞迴效能(使用費氏數列)
程式碼:
JAVA
- public static long fib(int n){
- if(n==1)
- return 1;
- else if (n==2)
- return 1;
- else
- return fib(n-1)+fib(n-2);
- }
- fib(40);
- function fib(n){
- if (n == 1)
- return 1;
- else if (n == 2)
- return 1;
- else
- return fib(n - 1) + fib(n - 2);
- }
- fib(40);
- static long fib(int n) {
- if (n == 1)
- return 1;
- else if (n == 2)
- return 1;
- else
- return fib(n - 1) + fib(n - 2);
- }
- std::cout<<fib(40);
- static long fib(int n)
- {
- if (n == 1)
- return 1;
- else if (n == 2)
- return 1;
- else
- return fib(n - 1) + fib(n - 2);
- }
- fib(40);
- def fib(n):
- if n == 1:
- return 1
- elif n == 2:
- return 1
- else:
- return fib(n - 1) + fib(n - 2);
- fib(40)
執行時間(單位:毫秒)
Java | 224 |
JavaScript | 632 |
C++ | 2527 |
C++(最佳化) | 251 |
C# | 2035 |
C#(最佳化) | 343 |
Python | 17947 |
================
比較:各語言大型二維陣列效能
程式碼(灰色字不列入計時):
JAVA
- int arr[][];
- arr = new int[10000][10000];
- for(int i = 0; i < arr.length; i++)
- for(int j = 0; j < arr[i].length; j++)
- arr[i][j] = 0;
- for(int i = 0; i < arr.length; i++)
- for(int j = 0; j < arr[i].length; j++)
- arr[i][j] = 255-arr[i][j];
- var tArray = new Array();
- for (var k = 0; k < 10000; k++) {
- tArray[k] = new Array();
- for (var j = 0; j < 10000; j++) {
- tArray[k][j] = 0;
- }
- }
- var y=0,x=0;
- for (y = 0; y < 10000; y++) {
- for (x = 0; x < 10000; x++) {
- tArray[y][x] = 255 - tArray[y][x];
- }
- }
- unsigned char** fp = new unsigned char* [10000];
- int x = 0, y = 0;
- for (int j = 0; j < 10000; j++)
- fp[j] = new unsigned char [10000];
- for (y = 0; y < 10000; y++)
- {
- for (x = 0; x < 10000; x ++)
- {
- fp[y][x] = 255 - fp[y][x];
- }
- }
C#
- int[,] number = new int[10000, 10000];
- int y = 0, x = 0;
- for (y = 0; y < 10000; y++) for (x = 0; x < 10000; x++) number[y,x] = 0;
- for (y = 0; y < 10000; y++)
- {
- for (x = 0; x < 10000; x++)
- {
- number[y,x] = 255 - number[y,x];
- }
- }
- score=[[0]*10000 for i in range(10000)]
- for i in range(10000):
- for j in range(10000):
- score[i][j]=0
- for i in range(10000):
- for j in range(10000):
- score[i][j]=255-score[i][j]
執行時間(單位:毫秒)
Java | 52 |
JavaScript | 194 |
C++ | 185 |
C++(最佳化) | 45 |
C# | 437 |
C#(最佳化) | 171 |
Python | 13908 |
=======================
整體上來說,在各個方面每個語言各有優劣
但依我個人排序的順序比為:
- C++(最佳化)
- Java
- C#(最佳化)
- JavaScript
- Python
不過就如開頭紅字所說,程式語言不應用來直接比較速度,如果想要更優的效能,編寫出更好的演算法帶來的速度效益往往超過更換語言的速度效益。
對此篇有興趣的歡迎指教,希望以後可以出更多IT相關文章
沒有留言:
張貼留言
有興趣或有疑問的歡迎提問與交流喔!!!