首页 > 解决方案 > 尽管引用了类型库,为什么 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.

标签: c#.netperformancecom

解决方案


推荐阅读