1

我在一个 ASP.NET MVC 4 应用程序中工作,在应用程序启动时我正在寻找使用 BuildManager 来获取所有引用的程序集。我正在查看应用程序中的所有类型以找到我想要的一些(它是动态的所以在启动之前我不知道我需要什么类型)。

基本上我的代码如下所示:

var allTypes = BuildManager.GetReferencedAssemblies()
                  .Cast<Assembly>()
                  .SelectMany(a => a.GetTypes());

我在应用程序启动时调用它,但也在每个新请求开始时调用它以动态查找类型。

所以我的问题是:

  1. 由于 ASP.NET 在需要它们之前不会加载程序集,因此通过调用BuildManager.GetReferencedAssemblies()我是否在需要它们之前加载所有程序集并导致性能问题?
  2. 对于每个请求,遍历所有类型是一个坏主意吗?我可以缓存这些类型,但是 ASP.NET 可以选择在我缓存它们之后动态加载程序集,对吧?如果是这样,我可能会错过一些确实存在的类型。

谢谢!

4

1 回答 1

1

不要每次请求都做:尽早做缓存;反射很慢。

预加载所有程序集并在应用程序启动时执行;我有一个系统,我在我们的很多网站中都使用它,它必须根据已部署的程序集做很多动态的事情,我在启动时完成所有工作。

是的,因此启动速度较慢 - 但这比每个请求花费的时间更长的问题要小。

然后,您很可能会对我刚才询问并回答的关于如何可靠地预加载所有已部署程序集的问题感兴趣:如何为 AppDomain 预加载所有已部署程序集

直到今天我仍然使用相同的过程,它就像一个魅力。

于 2012-08-29T16:31:17.047 回答