繁体   English   中英

如何优化此代码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM