這門語言和net這個平臺還有發展前途嗎?
一門語言有沒有前途,很重要的一點就是這個語言性能怎么樣,我一直認為c#的性能還是不錯的,但是,試驗結果,卻很意外!
在認真回答這個問題之前,我一直以為C#這個語言性能要比java好。之前從事過6年多的asp.net開發。
為了回答這個提問,我親自編寫了一下三種語言同樣的浮點運算函數的代碼,對比三種語言的性能:c++,c#,java.讓事實說話。
我以為c++排第一,c#排第二,java排第三。但是結果卻讓我大跌眼鏡架。
java性能居然奪冠,c#跟c性能差不多稍弱一點點。這個結果太另我驚呀了。
當然,我是從技術這方面出發,提問者更關心的其實是自己學哪種語言前途更好,決定前途的,我認為不是語言本身,而是人本身。不過,有一個打臉的事實,java程序員工資,確實普遍比.net程序員工資高。做為一個.net程序員,這是個讓人悲傷的消息。
附三種語言的代碼,親測可以直接編譯運行,有興趣可以自行運行對比結果。注意各語言對時間的單位不一樣,有的用的毫秒,有的用的微秒,由于獲取時間都存在誤差,對比幾毫秒的差距意義不大,看看誰先跑完就行了。我將運算次數定為5億次計算。如果時間差不明顯可以增大計算時,比如加到50億次計算,就可以看到更明顯的差距。
c++代碼:
#include <iostream>
#include<time.h>
void start()
{
clock_t start_t, end_t;
double total_t;
for (int j = 0; j < 5; j++)
{
start_t = clock();
double c = 100000.123;
double b = 200000.021;
double ef = 300000.321;
for (int i = 0; i < 500000000; i++) { ef = c * b + ef / c - b; }
end_t = clock();
total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
std::printf("第%d次執行,耗時:%f\n",j,total_t); } }
int main(){
std:printf("test\n"); start(); return(0);
}
c#代碼:
using System;
namespace csharp{
class Program {
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Program test=new Program();
long f1 = DateTime.Now.Ticks;
System.Console.WriteLine(f1);
test.strat(); long f2 = DateTime.Now.Ticks;
System.Console.WriteLine(f2-f1); }
public void strat() { for (int j = 0; j < 5; j++) { long f = DateTime.Now.Ticks;
double c = 100000.123;
double b = 200000.021; double ef = 300000.321; for (int i = 0; i < 500000000; i++) {
ef = c * b + ef / c - b; } long g = DateTime.Now.Ticks; long kl = (g - f)/1000; System.Console.WriteLine("第"+j.ToString()+"次執行,耗時:"+kl.ToString()+";");
} }
}}
java代碼:
import java.util.Date;
public class JTest {
public void strat()
{
for (int j = 0; j < 5; j++)
{ long f = new Date().getTime(); double c = 100000.123; double b = 200000.021; double ef = 300000.321; for (int i = 0; i < 500000000; i++) { ef = c * b + ef / c - b; } long g = new Date().getTime(); long kl = g - f; System.out.println("第"+j+"次執行,耗時:"+kl+";"); } }
public static void main(String args[]){ System.out.println("Hello World!");
JTest test=new JTest();
long f1 = new Date().getTime();
System.out.println(f1); test.strat();
long f2 = new Date().getTime();
System.out.println(f2-f1); }
}