簡體   English   中英

將一些C#代碼轉換為托管或C ++ / CLI代碼

[英]Converting some C# code to managed or C++/CLI code

我有一個現有的C#應用​​程序。 我想要的是為c#應用程序的某些部分編寫本機代碼以提高速度,而另一部分使用C#app,另一部分使用C ++ / CLI為C#應用程序提供接口。 所以對於后一部分,我需要將C#代碼轉換為C ++ / CLI。

我想知道我是否可以將我的C#代碼轉換為C ++ / CLI代碼。 將.net程序集轉換為C ++ / CLI可能是獲取特定代碼的更好主意。 我看着反射器和它的插件CppCli。 但是插件不再可用了。 所以我正在尋找任何方法來實現自動化。 我很感激任何建議。

一般來說,C ++ / CLI與C#的運行時間大致相同(兩者都是托管的,可能會被轉換為相同的IL)。 如果您的應用程序的某個部分需要運行得更快,您可以編寫C ++ / CLI層,以便您的C#應用​​程序可以與一些本機C ++互操作。 如果您正確編寫本機C ++,這將更快。

編輯:正如Ben Voigt指出的那樣,C ++ / CLI可能比C#更優化,但仍然沒有編寫良好的原生C ++那么快,因為它仍然可以管理。

如果您希望在C ++ / CLI中包裝一些本機代碼,那么轉換工具可能無論如何都不會以有用的方式構建它。 你最好只手工編碼互操作部分。

有一些商業工具可以做到這一點,但我認為你手工制作它仍然會更好。

您可能不必轉換代碼。

link.exe是C ++編譯器工具的一部分,能夠在同一個程序集中包含C ++和C#代碼。 C ++位可以包含托管代碼和非托管代碼的混合。 首先必須使用C#編譯器(csc.exe)的命令行開關將C#代碼編譯為.netmodule,然后可以使用link.exe將其編譯為帶有C ++代碼的程序集。 我已經創建了一個混合語言程序集已經有一段時間了,如果細節不是100%,那么道歉,但搜索上述術語,你會找到一種方法。

我似乎記得關鍵部分是記住C ++編譯器比其他編譯器更先進,因此可以使用C#/ VB netmodules,但不是相反。 我發現編譯成單個程序集而不是引用另一個程序集的優點是單個程序集的每個部分內部的類型可以相互交叉引用。 通過在兩個單獨的程序集之間引用,類型感知關系必須是分層的。

C#中還有unsafe關鍵字,它允許在C#代碼文件的各個部分中使用C ++ - ish樣式指針,並關閉數組邊界檢查。 根據您的使用場景,這可能有問題,也可能無關緊要。

我個人發現在C ++編譯器中運行一些計算密集型代碼比C#快20倍,之后我使用C ++中提供的指針對其進行了優化,這在我的案例中是值得的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM