"as" 在 COM 中与 QueryInterface 和 C++ 中的 dynamic_cast 相比,成本如何?

7
我仍在努力将我深厚而古老的C/C++知识映射到相对浅薄的 .Net 知识上。今天是时候谈论 C# 中的“as”(以及隐含的“is”和“cast”)了。
我的理解是,“as”在 C# 中实际上就是一个查询接口或者动态转换(传入指针而非引用)。我的问题有两个:
1. 我的比较公平吗? 2. 与“QueryInterface”或“dynamic_cast”相比,“as”的相对成本如何?
1个回答

5
  1. 是的,这个比较很公正,特别是在处理指针时。每个选项都会成功并返回目标类型的非空指针,或者返回null。

  2. 在使用.NET中的COM对象时,实际上可以使用as操作符,这使得它与QueryInterface等效,并带有少量管理/COM互操作的开销。在CLR内部(管理类型之间的转换),as操作符与COM中的QueryInterface或C ++中的dynamic_cast相比极其轻量级。对于我代码中所有必须使用动态类型转换的地方,我从未在性能分析中看到as操作符显示出任何一个样本 - 考虑到我维护着一种动态类型、运行时绑定语言(StringTemplate)的实现,我认为这意味着什么。:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接