Asp.net mvc ASP.NET MVC BuildManager.GetAssemblys()
我在ASP.NET MVC 4应用程序中工作,在应用程序启动时,我正在使用BuildManager获取所有引用的程序集。我正在查看应用程序中的所有类型,以找到我想要的一些类型(它是动态的,所以在启动之前我不知道需要什么类型) 基本上,我的代码如下所示:Asp.net mvc ASP.NET MVC BuildManager.GetAssemblys(),asp.net-mvc,reflection,.net-assembly,Asp.net Mvc,Reflection,.net Assembly,我在ASP.NET MVC 4应用程序中工作,在应用程序启动时,我正在使用BuildManager获取所有引用的程序集。我正在查看应用程序中的所有类型,以找到我想要的一些类型(它是动态的,所以在启动之前我不知道需要什么类型) 基本上,我的代码如下所示: var allTypes = BuildManager.GetReferencedAssemblies() .Cast<Assembly>() .SelectMa
var allTypes = BuildManager.GetReferencedAssemblies()
.Cast<Assembly>()
.SelectMany(a => a.GetTypes());
var allTypes=BuildManager.getReferencedAssemblys()
.Cast()
.SelectMany(a=>a.GetTypes());
我在应用程序启动时调用它,但也在每个新请求的开头调用它,以便动态查找类型
因此,我的问题是:
BuildManager.getReferenceAssemblys()
是否在需要程序集之前加载所有程序集并导致性能问题谢谢 不要每次请求都进行缓存:尽可能早地进行缓存;反射很慢 预加载所有程序集,并在应用程序启动时进行;我有一个系统,我在我们的很多网站上使用它,它必须根据部署的程序集做很多动态的事情,我在启动时做所有的工作 是的,因此启动速度较慢,但这比每个请求花费更长时间的问题要少 然后,您很可能会对我刚才提出并回答的一个问题感兴趣,该问题涉及如何可靠地预加载所有已部署的程序集:
直到今天,我仍然使用相同的过程,它就像一个符咒一样工作。不要每次请求都这样做:尽早缓存;反射很慢 预加载所有程序集,并在应用程序启动时进行;我有一个系统,我在我们的很多网站上使用它,它必须根据部署的程序集做很多动态的事情,我在启动时做所有的工作 是的,因此启动速度较慢,但这比每个请求花费更长时间的问题要少 然后,您很可能会对我刚才提出并回答的一个问题感兴趣,该问题涉及如何可靠地预加载所有已部署的程序集:
到今天为止,我仍然使用相同的过程,效果非常好。谢谢!似乎
BuildManager.GetAllAssemblies()
可以加载所有东西,甚至是动态程序集。因此,如果我在启动时迭代并缓存结果,这是否会有效地“预加载”,这样我就不必手动进行预加载?对于网站来说,似乎确实如此,所以是的,您应该能够依靠它来获取网站的所有已部署程序集。如果您迭代它们并开始询问它们,那么肯定是的,它将预加载它们(在某种程度上,JIT仍然只会在需要时在内存中编译所需内容)。谢谢!似乎BuildManager.GetAllAssemblies()
可以加载所有东西,甚至是动态程序集。因此,如果我在启动时迭代并缓存结果,这是否会有效地“预加载”,这样我就不必手动进行预加载?对于网站来说,似乎确实如此,所以是的,您应该能够依靠它来获取网站的所有已部署程序集。如果您迭代它们并开始询问它们,那么肯定是的,它将预加载它们(在某种程度上,JIT仍然只在需要时在内存中编译所需内容)。