2011-10-14 68 views
4

我正在考慮開發Winforms應用程序,該應用程序將使用c庫來預成型所有計算。我想使用C#,因爲開發GUI非常簡單,而C則可以提高性能。組合這兩種語言有其他優點或缺點嗎?作爲計算,我主要是(但不限於)圖算法,如着色,dijakstra,最大流量;我期望圖表很龐大,而且表現非常重要。組合C#和C的優點/缺點

+5

C#有相當不錯的表現,在大多數情況下與C相媲美。你爲什麼認爲你需要兩者? – driis

+2

我們不可能在不理解你想要執行什麼「計算」的情況下回答這個問題。但我覺得這個理由完全有誤。 C#被打亂並且運行得非常快。在走上這條道路之前,您應該證明您的「計算」確實對性能至關重要(此外,在C語言中將會幫助您)。 –

+6

確保C實際上對你來說會更快。寫得不好的C比寫得很好的C#慢。對於這個問題,寫得不好(在這裏插入快速語言)通常比書面寫得慢(在這裏插入慢語言)。在查看速度時,代碼質量是一個至關重要的因素。 – riwalk

回答

12

和C以提高性能

你可以寫很好使用純託管代碼執行的應用程序。以這個網站爲例。它相當快速,你不覺得嗎?

我看到的東西的方式如下:只有當您真的是某種表現狂(某人試圖解決Google所做的縮放問題)或者您有一些現有的C代碼庫,您無法立即移植到.NET,並且您必須進行互操作。

在其他情況下,託管代碼更安全。如果您對性能感到不滿,不要忘記,在許多情況下,託管代碼和非託管代碼之間的編組成本將高於您從純非託管代碼中獲得的性能。此外,JITter在每個版本的框架中變得更加智能和智能,並且有一天它可以生成與非託管代碼幾乎一樣高效的代碼。

所以,是的,去管理,讓C到瘋子:-)

+0

我之前有過這個參數,但是我點擊'C#是一個緩慢的東西的腳本語言,真正的代碼是用C/C++編寫的' – pm100

1

獲取固定的內存位置,也將你的索引,以C指針可能有負面影響。您可以嘗試安全和不安全的代碼,並嘗試查看結果,但我的猜測是安全代碼最終會表現得更好。當然,你的計算也是一個重要的因素。

2

我不會確定C會比C#更快,因爲你要做的事情。 jitted代碼非常快。另外,如果你正在做大量的計算,通過使用c#/。net,你可能會利用Task Parallel Library,這將大大簡化並行計算。實際上,對於所有多核機器,我認爲如果可以利用多核(如果可以直接使用C,也可以使用.net中的TPL),那麼對於您的雄鹿而言, 4比基本WinApi更有效率)

另一件你可能會考慮的事情,我是從我自己的經驗之外發言的,所以絕對要做你自己的研究:我聽說F#可以是一個很好的用於編寫科學集/計算庫的選擇。我自己並沒有寫一行F#,但從我的理解來看,語言設計支持以使得它們極其可並行化的方式編寫計算。

(當然,現在你有一個新的問題 - 學習F#)

這裏有一個職位,你可以看看:F# performance in scientific computing

+0

我已經檢出F# - mayby可能確實有幫助,但是在其中學習和編寫算法的時間太多不可預測:P – Zaphood

0

我在過去做到了這一點,我會像其他人提到的那樣,編組的成本不是免費的,所以在這是一個有效的選擇之前,你需要一些非常專業化的需求。

我對您的唯一建議是從最適合的語言開始,如果您想擁有託管代碼和C#提供的其他功能,那麼這將是C#。然後,如果性能是一個問題,並且通過在權衡pro/cons之後添加一些C代碼並考慮是否可以通過重新設計高級算法而不是在較低級別進行優化來獲得一些優化,那麼請仔細地進行性能分析和優化。例如,如果您要編寫科學代碼,那麼您會讓代碼變得多線程化,或者在您嘗試其他較低級別的優化之前檢查您是否無法重新使用先前的計算,而這會對您的效率產生更大的影響。比追逐小問題。