参见英文答案 >
How costly is .NET reflection?13个
我在.NET / C#中使用反射API,如GetType()和GetTypes().
我在.NET / C#中使用反射API,如GetType()和GetTypes().
>在性能方面,这些API有多好或多坏?我的意思是,这些API是否需要花费很多时间才能导致性能下降,或者这些API是否设计得很好,可以忽略性能问题?
>通常人们在使用反射API时会缓存结果吗?
解决方法
我们不知道“好”和“坏”对你意味着什么.
我们不知道您是否在可能成为应用程序瓶颈的关键性能代码中使用这些代码.
只有您确切知道使用Object.GetType和Assembly.GetTypes时代码将采用的路径.
因此,只有您可以准确地描述这些方法对应用程序性能的使用有多大意义,以及尝试通过缓存提高性能的好处.
我可以告诉你:我从来没有将Type.GetType和Assembly.GetTypes作为我应用程序的瓶颈,而且我没有缓存结果(但是,我需要缓存MemberInfo.GetCustomAttributes,但我只是来到那里在分析器告诉我这是我的应用程序中的一个重要瓶颈并且缓存将大大提高性能之后的结论.
回应你的编辑:
I mean,are these APIs take much time that might cause some performance degradation,or are these APIs well designed to ignore performance issues?
你有什么替代品?如果您需要为给定对象引用Type,或者您需要给定程序集中的所有类型,我向您保证Object.GetType和Assembly.GetTypes是您的最佳选择.问题是,你是如何使用它们的?我们再一次不知道,因此不能告诉你该怎么做.您必须分析这些函数的实际使用情况,并了解它们是否会导致应用程序出现瓶颈.