0

我在定位从某种类型派生的类型的方法时遇到性能问题。它使用反射来获取当前加载的所有程序集 ( AppDomain.CurrentDomain.GetAssemblies()),然后遍历每个程序集 ( Assembly.GetTypes()) 中的所有类型以查找匹配项。它在一个单独的 DLL 中实现,可以在 .NET 应用程序中使用,但它也是 COM 可见的,并且可以从 VB6 应用程序调用。

这种方法效果很好,在很多情况下也表现不错。我的问题是,在某些情况下,对程序集 System.Data.Entity 的 GetTypes 调用需要很长时间,超过 5 秒。以下是主要观察结果:

  • GetTypes 调用需要这么长时间的始终是 System.Data.Entity,而不是另一个程序集。可能有 50 个其他已加载程序集的 GetTypes 调用,但它们都立即完成。
  • 如果从 .NET 应用程序(例如 .NET 控制台应用程序)中调用该方法,则永远不会出现此性能问题。GetTypes 调用总是立即完成。
  • 如果从通过 COM 使用我的 DLL 的 VB6 应用程序中调用该方法,则问题经常发生,但并非总是如此。我还不知道,是什么导致 5+ 秒的时间延迟有时会发生,有时不会发生。

我已经用最少的测试应用成功地验证了上述观察结果,所以没有什么比我刚才提到的更重要了。

我对可能导致此问题的原因一无所知。有人有想法吗?

问候,彼得。

4

0 回答 0