2009-06-30 120 views
13

我經常聽到人們讚美C#的編譯速度。到目前爲止,我只做了一些小應用程序,而且我注意到編譯速度非常快。但是,我想知道這是否仍然適用於大型應用程序。大C#項目比類似大小的C++項目編譯速度更快嗎?C#編譯大型項目的時間(與C++相比)

+2

我也想知道。我用C#編寫了一個小應用程序,與C++相比編譯速度驚人。 – Naveen 2009-06-30 07:07:18

+0

我在一個解決方案中有超過40個項目(我沒有創建它)花了很長時間(大約1分鐘)在PIV上編譯。將我的PC升級到Core 2將其縮減到更可接受的時間,就像將代碼重構爲更少的項目一樣。擁有大量項目將影響C#項目的編譯時間。 – RichardOD 2009-06-30 07:58:48

回答

5

就我自己的經驗而言,是的,C#編譯速度比C++項目快得多。即使是大型應用程序。

這可以通過以下事實來解釋:C#作爲一種語言不像C++那麼複雜,並且C#被轉換爲IL(可以優化並稍後轉換爲機器碼),並且C++立即轉換爲機器語言。

10

是的,C#通常編譯速度更快。雖然時間不夠快。我最大的C#代碼庫可能有一百萬行代碼和很多項目,大約需要一個小時才能編譯。但我懷疑這很大程度上是由於視覺工作室糟糕的構建系統。另一方面,編譯C++的時間通常要長得多,但也更依賴於如何組織代碼。頭文件依賴關係的處理不好可以輕鬆地將編譯時間增加幾個數量級。

+4

+1對於糟糕的頭文件處理髮表評論 - 我們通過整理頭文件在我們的大型C++項目上從1小時減少到8分鐘! – 2009-06-30 08:27:48

6

C++編譯起來非常慢,因爲每次包含頭文件時都必須重新讀取和重新分析頭文件。由於「#defines」的工作方式,編譯器很難自動預編譯所有頭文件。 (Modula-2在這方面做得更好)爲每個編譯的C++文件讀取100個頭文件在很多C++項目中都是正常的。

有時,增量C++編譯可能比C#快很多。如果你的所有C++頭文件(和設計)都處於非常好的狀態(請參閱Large-Scale C++ Software Design,Effective C++這樣的書籍)。可以對大部分系統使用的類的實現進行更改,並且只有一個dll重新編譯。

由於每當您更改類的植入時,C#沒有單獨的頭文件,即使該類的公共接口未更改,該類的所有用途也會重新編譯。這可以通過使用「基於接口的編程」和「依賴注入」等在C#中減少,但它仍然是一個痛苦。

但是總體而言,我發現C#編譯速度夠快,但是大型C++項目編譯起來太慢,我發現自己不想在重建時由於重建時間而將方法添加到「基類」中。

大量的Visual Studio項目在每個類中都有一些類會減慢C#的構建速度。將相關項目組合在一起,然後「信任」開發人員不要使用專用於名稱空間的類可以獲得很大的好處。 (nDepends可用於檢查打破規則的人)

(當試圖加快C++編譯時,我發現FileMon非常有用。我工作的一個項目,STL被添加到頭文件並且構建得到了只要將STL添加到預編譯的頭文件中就會產生很大的差異!因此,跟蹤您的編譯時間並調查其編譯時間。)

3

這也是我的觀察結果,C#比C++編譯速度快得多。主要原因之一是當然模板不需要放在C#中的頭文件中,因爲沒有頭文件。但大量使用模板(主要是像Boost這樣的現代C++庫)正在使用C++來縮短編譯時間。