[英]How to optimize this Code
var type = typeof(TInterface);
var types = AppDomain.CurrentDomain.GetAssemblies().ToList()
.SelectMany(s => s.GetTypes())
.Where(t => type.IsAssignableFrom(t));
这段代码比我想要的慢。 有人可以建议一种更优化的方式来用C#编写代码吗?
ToList()
完全是冗余的,虽然这不太可能导致任何减速:
var type = typeof(TInterface);
var types = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.Where(t => type.IsAssignableFrom(t));
仅供参考,上面的代码应该相对较快,它只是在您试图通过types
枚举.Net框架完成繁重工作时。
除此之外,没有什么不知道更多关于你正在尝试做的最优化-上面得到的所有类型的枚举t
在加载到当前域中的所有组件,其中typeof(TInterface).IsAssignableFrom(t)
-如果有加载了很多类型/程序集然后我担心这需要一些时间。
你能告诉我们更多关于你想要做什么的事吗?
您正在迭代已加载/引用的所有程序集中的所有类型。 但您想要的类型是您的类型,因此您知道它不在任何系统程序集中。 例如,如果您没有安装程序,则可以过滤掉全局程序集缓存中的程序集:
var type = typeof(TInterface);
var types = AppDomain.CurrentDomain.GetAssemblies().Where(a => !a.GlobalAssemblyCache)
.SelectMany(s => s.GetTypes())
.Where(t => type.IsAssignableFrom(t));
如果您的应用程序安装在GAC中,则可以使用其他过滤策略将程序集限制为您自己的程序集。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.