所以現在就是這種情況: 我在同一個解決方案中將C#GUI項目與C#Engine項目組合在一起。 GUI允許與用戶交互,一些高級別的東西等。引擎的功能是與另一個第三方應用程序通信。該引擎具有連接到第三方應用程序的套接字,並具有將消息轉換爲對象,將其發送給第三方應用程序以及偵聽來自第三方應用程序的響應並作出相應反應的方法。要在Engine和第三方應用程序之間傳輸的數據打包到對象中。 C#引擎的問題是它太慢了。所以我們的想法是將引擎轉換爲非託管C++以提高速度。 這是我的進攻計劃:將C#引擎轉換爲C++以提高速度
- 由專人翻譯整個C#引擎成C++(這已經是相當艱鉅的,因爲C#引擎包括線程和哈希表)
有以下來替代構造,存取,和修改器在C++:
void* CreateInstance() { MyClass* p = new MyClass(); return p; } void ReleaseInstance(void* pInstance) { MyClass* p = (MyClass*)pInstance; delete p; } int GetData(void* pInstance) { MyClass* p = (MyClass*)pInstance; return p->GetData(); } void SetData(void* pInstance, value) { MyClass* p = (MyClass*)pInstance; p->SetData(value); }
(爲什麼我不能在C++中使用真實類的原因是因爲你不能實例在C#C++對象)
然後構建一個C++非託管DLL,在C#GUI項目([DllImport等])中使用P/Invoke來訪問所有C++方法,並用它來替換C#引擎。對象將使用方法進行模擬,並在C#GUI和C++ Engine之間來回傳遞。
之前,我走上這個耗時的任務,有沒有C#代碼,就不可能轉化爲C++,然後重新導入回C#GUI通過這種方法?
這看起來非常容易出錯,而且根本不好玩。另外,你這樣做的理由似乎是錯誤的。 – Pubby
您是否嘗試過實際分析您的C#引擎?我不明白在大多數情況下用一種不同的語言重新編寫的東西是否值得編排開銷。如果您的C#代碼使用線程,因爲它同步使用套接字,那麼您的代碼很差,與編寫的語言是正交的。 – ildjarn
與固定C#代碼相比,將受管理值封送到本地和返回的性能損失如何?我不確定CLR比本地代碼慢很多,因此用C++重寫某些東西將是一個合理的解決方案。除非您的託管代碼將託管類型大量編組爲本機類型。 –