2011-11-20 36 views
3

我正在開展一個學校項目,我需要開發一個假設來驗證或僞造。我的假設是C#執行時間比Windows上的Java執行時間快,因爲C#是由Microsoft開發的。你們中的一些人可能已經知道這個假設的答案,並且可能有研究記錄了這一點。但沒關係,我只需要自己做這個項目。測試C#與Java性能(執行)時需要關注哪些領域?

因此,我想要關注一些領域的想法,以及如何衡量它們?

P.S它不應該太複雜。

謝謝!

+6

這個假設的問題在於它非常廣泛。你可能會發現很多地方是真的,有很多地方是虛假的;你會發現一大套應用程序的性能是由一種而不是另一種來決定的。 – delnan

+0

我同意@delnan。如果你想簡化它(就像你的問題所建議的那樣),我會專注於單獨一個方面:內存訪問/ garabae集合/浮點運算計算/ ... – amit

+0

那麼JVM JIT在整個數學/ (即與C++一樣快),我認爲.NET JIT不會太落後 - 當然這是一個值得嘗試的事情,但我會驚訝於很多不同之處。我也沒有看到內存訪問如何受到語言的巨大影響,特別是考慮到開銷本身。測試內存障礙將是有趣的,但GC是一個非常好的主意(儘管考慮到所有可用的不同變體,測量很複雜)。 – Voo

回答

4

有些事情,我會測試:

打開一個文件,寫一行到它,並關閉它的時間。

打開網絡連接的時間。

打開數據庫連接的時間,寫入一個字節,然後關閉連接。

創建和填充數組,標準ArrayList和通用ArrayList的時間。

排序時間,使用不同的算法。

運行大循環的時間。

+1

打開數據庫連接的時間告訴你關於數據庫驅動程序/庫的一些信息,但是沒有關於用於編寫程序的語言。你如何確保你的C#和Java程序是等價的?我知道C#比我認識的Java更好,所以我期望當我用C#編寫程序時,它比使用Java編寫程序更有效率,因爲我更瞭解語言,平臺和編譯器。你如何用不同的語言編寫兩個「平等」的程序? – jalf

+0

+1:如果C#在Windows上更好,它應該是C#與操作系統的交互,它比Java更快。否則,您會期望C#或Java在各個操作系統中始終保持更快的速度。但是,我懷疑C#在哪些方面具有優勢,是與Windows特定功能而不是性能集成。 –

0

我會親自關注一些最常見和日常的任務 - 循環,字符串操作,數組/列表,整數和浮點計算,文件操作。對於測量,您可以在C#中使用Stopwatch(最精確的本地.NET測量解決方案)。我不知道Java,但也有一個StopWatch類,它的目的應該是相同的。

0

那麼首先讀this here - 是的,包括一個鏈接的文章(以及this one is great)。如果你不這樣做,我們可以在這裏停下來,因爲你只會測量垃圾。是的,這個問題在一定程度上也存在於C#中。

另外它取決於你用C#測量的東西 - 使用不安全的代碼可以提供很好的性能改進,但代價是基本上所有非託管語言的缺點。以及你使用什麼開關程序 - 不使用-server爲Java將是一個非常好的主意,使C#看起來比它好;)

什麼是合理的基準測試?那麼一些簡單的數學問題通常很好顯示(並且JIT可能相當擅長這樣做,所以不希望太多差異 - 這也是答案)。那麼也許有些基準測試表明JIT在優化內容方面有多優秀 - CSE,虛擬內聯等等。那麼這可能取決於您對優化的總體瞭解程度。

當然也有趣的是測試全部/部分垃圾收集運行的延遲/時間。

0

我的假設是C#執行時間比在Windows上的Java執行時間更快,因爲C#是微軟

開發你的措辭不是很清楚這裏。疑似病因是假說的一部分嗎?然後,如果C#已經由微軟以外的人編寫,那麼你將不得不驗證C#是如何實現的。要以任何程度的可靠性來做到這一點,都需要從頭開始實際實施C#for Windows。

此外,語句「C#執行時間比Windows上的Java執行時間快」沒有明確定義:執行時間是什麼?如果很可能有C#優於Java的區域/程序,以及Java優於C#的其他區域。爲了使這個假設成爲可測試的,你需要縮小它的範圍,例如一個特定的程序,它可以在編程語言,特定的輸入,特定的JVM/CLR實現上幾乎不變地實現,在特定的計算機上。是的,這種說法不會有用,但至少是可以檢驗的。

+0

我的問題有點不清楚。我的意思是,在C#上執行時間比Java快,在我要求提供想法的領域。 – Kenci

2

這個假設的問題是我只需要找到一個反例來反駁它。實際上你可以編寫的程序數量不限,所以不可能驗證你的假設。

即使您將其縮小到比如說「C#在排序時比Java快」,我仍然可以編寫無限數量的執行排序的程序。再一次,他們中的一個必須在他們的Java實現中更快,並且你的假設被拍攝。

其他問題是C#和Java都沒有「速度」。

微軟的C#編譯器,並在其最新版本有一定的性能特點及其.NET實現,和甲骨文最近的JVM版本和最新的Java編譯器版本有一定的性能特性,但沒有提到C#或Java 一般。那麼C#2.0編譯器呢?那麼Mono C#編譯器呢?

比較語言的性能毫無意義。語言沒有速度。

相關問題