c# - 尽管引用了类型库,为什么 C# 在 COM 接口上使用后期绑定?
问题描述
我有一个 .NET 5 应用程序,它使用 COM 接口从外部会计系统获取数据。由于目前获取数据需要 30 秒或更长时间,鉴于数据的小规模是不可接受的,因此我在 Visual Studio 中分析了应用程序。
我看到InvokeMember()
占用了大部分 CPU 时间。据我所知,InvokeMember()
通常用于后期绑定,但我在我的项目中嵌入了类型库 .dll。我的假设是,由于我引用了所述类型库,因此不需要后期绑定。即使我从未InvokeMember()
显式调用,为什么 C# / .NET 仍然在后台使用后期绑定?有没有办法可以避免这种后期绑定或至少纠正其性能影响?我见过的大多数优化都是针对你确实InvokeMember()
直接在代码中调用的用例,而我从来没有这样做过。
附加信息:
如果我查看类型库中的元数据,我会看到
[Guid("276EF2E0-E21B-11CE-AB56-00608CDFDCF8")]
[InterfaceType(2)]
[TypeLibType(4096)]
在每个类的顶部(Guid 不同)。在注册表中查找 Guid 然后通过ProxyStubClsid32
.
解决方案
推荐阅读
- javascript - 没有网络服务器的静态 HTML 页面的动态获取
- python - Pandas 中的最近邻匹配
- php - 无法通过 Twitch for Wordpress 插件延迟 jQuery 和使用浏览器缓存
- python - 我想通过谷歌搜索获取实时股票价格数据
- scala - 在scala中进行wordcount时如何过滤包含数字的单词
- javascript - ListItem 中的 React-Native Switch 始终未选中
- expo - 如何从使用 MobX 的 Expo(react-native)应用程序建立到 FeathresJS 服务器的连接
- c# - RavenDB: Object Field Value Being Rounded At Random
- python - 对图像块进行多处理
- c++ - 未在程序发布版本 C++ 中创建的部分