通过COM的Assembly.GetTypes在System.Data.Entity上花费很长时间

时间:2013-01-22 10:54:54

标签: .net performance entity-framework reflection com

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

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

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

我已经用最少的测试应用程序成功验证了上述观察结果,因此实际上没有什么比我刚才提到的更多。

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

此致 彼得。

0 个答案:

没有答案