• 测试技术
  • 博客
  • 视频
  • 开源
  • 论坛
  • 沙龙
  • 下载
  • 杂志
  • 招聘

您的位置:您的位置:软件测试技术门户 >> 软件测试技术 >> 开发语言 >> .net >> 查看资讯

字号: | 推荐给好友 上一篇 | 下一篇

通过 Visual C++ 的编程模型和编译器优化增强您的应用程序

发布: 2008-5-14 09:49 | 作者: 不详 | 来源: ccid | 查看: 88次 | 进入领测软件测试网论坛讨论

领测软件测试网

q0n0h"?"zRD w软件测试技术门户M;R2O4Y? ga M
软件测试技术门户EO%F,r @s%tuAC
返回页首
o)E'z\(j.M!z为什么 dllexport 不能始终适用
-Mb.B| a!zCq#U
V(Qt n L-I
R1v Vc(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.Dl T7Y
_(`F(]!hm软件测试技术门户nx WC? m$A

n:uQ S/r#ix图 8 降低 Thunk 成本
F{&u!v H{2X7[;L%j)w
&c^ `'mIDp