領測軟件測試網
q0n0h"?"zRD
w軟件測試技術門戶M;R2O4Y?ga
M軟件測試技術門戶EO%F,r@s%tuAC返回頁首
o)E'z\(j.M!z為什么 dllexport 不能始終適用
-Mb.B| a!zCq#UV(Qtn L-IR1vVc(L使用 __declspec(dllexport) 有它自己的缺陷。當您有兩個映射(DLL 或 exe)都為托管映射,但通過 dllexport 而不是通過 #using 公開功能時,dllexport 的問題就會暴露。因為 dllexport 是一個本機構造,所以每次使用 __declspec(dllexport) 跨 DLL 邊界調用時,都會先引發從托管到本機的轉換,再引發從本機到托管的轉換。這樣就難以獲得很好的性能。
`+j-X$RK軟件測試技術門戶M~-JZ'kK
kFT]解決這種性能問題的選擇很有限。沒有簡單的“開關”可以立刻讓 __declspec(dllexport) 成為對托管代碼沒有相關 thunk 的構造。推薦的修復辦法是將導出的功能包裝在一個托管類型(引用或值類/結構)中,導入程序再通過導出 DLL 上的“#using”訪問該類型,從而直接訪問導出 DLL 中的功能。通過這種更改,當從托管客戶端調用這段托管代碼時就不需要進行轉換。圖 8 中對此做了說明,其中 A 部分顯示了與使用 __declspec(dllexport) 相關的成本,B 部分顯示了使用 #using 和將函數包裝在 .NET 類型中所帶來的優化。這種方法的一個潛在問題是導出 DLL 的非托管導入程序不能對 DLL 的功能進行 __declspec(dllimport)。這在進行更改之前應該加以考慮。
U,p+}6Enw.DlT7Y_(`F(]!hm軟件測試技術門戶nxWC?m$An:uQ S/r#ix圖 8 降低 Thunk 成本
F{&u!vH{2X7[;L%j)w&c^ `'mIDp
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月