2010-10-24 23 views
1

我有一個C++/CLI庫調用了很多本地C++方法。我已閱讀了許多線索,聲明不應混用託管和非託管代碼。我無法找到任何說明如何避免這些開關以及爲什麼它會導致性能問題。有人可以分享最佳做法嗎?混合模式C++/CLI性能注意事項 - 最佳實踐

回答

3

使用C++/CLI的唯一原因是支持混合託管代碼和本地代碼。如果一切都被管理,那麼使用C#或VB,如果一切都是本地的,那麼使用C或C++。或者你喜歡的任何語言。顯然避免混合是無意義的。

從管理到非管理有一小部分開銷。 C++/CLI編譯器會自動生成一些機器代碼,這些代碼在堆棧上推送一個「cookie」,旨在防止垃圾收集器陷入非託管堆棧幀,並將該幀上的指針錯誤解釋爲託管對象引用。成本約7納秒,給予或承擔。

+2

特別注意:C++ interop比p/invoke便宜得多。當滿足兩個條件時,C++/CLI將使用C++ interop:您正在構建混合模式程序集(不是'/ clr:pure'),並且使用正常C++原型聲明函數(通常來自本機頭文件),而不是p/invoke'DllImport'屬性。 – 2010-10-25 14:40:27