2012-08-24 30 views
1

我正在考慮在C#應用程序中運行用C++編寫的函數,無論是移動還是普通應用程序。訪問C#應用程序性能的C++代碼

在C#環境(應用程序)中運行用C++(數學處理)編寫的代碼,如果使用C#編寫相同的代碼(理論),運行速度會更快還是差不多?

謝謝!

第二個問題:如何在C#應用程序中包含並訪問C++代碼,而無需從DLL進行外部訪問?

+0

作爲第一個猜測,如果你想要'-ffast-math'這樣的東西,我相信C++可能會給你一些提升。否則,它可能不值得麻煩或值得被納入SSE,而不僅僅是任何C++。 UPD:你不能在邊界上做很多「++」。簡單的C式呼叫,就這些。 –

回答

0

雖然可以接近在C#中通常是C++版本速度更快(在我的經驗)。 C++優化編譯器可以做得更好(編譯/優化可能需要更長的時間),並且在C++中,您可以使用像SSE這樣的東西來加快數學運算速度,這在C#中非常麻煩。我已經創建了大整數乘法的代碼,它在SSE中的速度是彙編程序的5倍,而這隻比相同的C++代碼快10%。 5X主要來自SSE能夠通過單個指令進行2倍32位乘法。

C#允許不安全的代碼,你可以做一些指針的東西。加速諸如數組處理之類的東西(因爲它通常會限制所有數組的訪問,這有助於數組處理)。你可以回退到使用非託管DLL的C++編寫

所以,除非您的代碼將在年底運行幾個小時我想優化它可能會很有趣,但沒有真正值得;-)

有/是Microsoft的.NET的C++/CLI變體,可以更輕鬆地混合C++和C#。見http://www.functionx.com/cppcli/Lesson01.htm但不確定它仍然是支持的,從我收集的它從一開始就皺起了眉頭,不知道爲什麼。

你也可能會發現這個堆棧交換問題有趣的是爲什麼VirtualMachine語言在性能上與預編譯語言不同; Why are JIT-ed languages still slower and less memory efficient than native C/C++?

相關問題