反思真的很慢,我不应该使用它,当它是有道理的?

反思真的很慢,我不应该使用它,当它是有道理的?

问题描述:

可能重复:
How costly is .NET reflection?反思真的很慢,我不应该使用它,当它是有道理的?

的“优雅”的解决方案我有一个problem是使用属性类及其与其他属性相关联。问题是,要将其转换为另一个,我不得不使用反射。我正在考虑将其托管在云端的服务器端应用程序。

我听说过的“反思是缓慢的,不使用它,”怎么慢很慢很多传言? CPU密集程度如此之高,以至于我的CPU时间会倍增太多,以至于我决定在云架构底部使用反射的决定付出代价。

以防万一你看不到原来的问题的更新:当你反映找出所有支持的类型一定的属性,你有一个完美的机会来使用缓存。这意味着您不必在运行时多次使用反射。

要回答的一般问题,反思比原编制方法调用速度较慢,但​​它是多少,比访问数据库或文件系统快得多,而且几乎所有的Web服务器做这些事情所有的时间。

+0

Genius(+4个字符) – 2009-03-05 21:05:05

可能你甚至不会注意到它。在考虑优化之前,请始终首先进行简介。

它比文件系统访问快许多倍。

它比整个网络上的数据库访问快许多倍。

这比向浏览器发送HTTP响应要快许多许多倍。

我想知道同样的事情;但事实证明,反思并不是那么糟糕。我找不到资源(当我找到它们时,我会尽力列出它们),但我想我还记得,它的读取速度可能是2倍到3倍慢。速度的50%或33%仍然很快。

另外,我引擎盖下ASP.net WebForms和MVC做了一堆反射的,所以它是如何缓慢真的可以?

编辑

这里是一个资源我记得读:.Net Reflection and Performance

嗯,我尝试,如果我能避免反光,但如果我要创建一个解决方案,并反映给了我一个优雅的方式解决手头的问题,我会hapily使用反射。

但是,它必须被告知,我认为反思不应该被用来做“搞鬼”。在这个时候,我也在研究一个解决方案,我使用自定义属性来装饰一些类,是的,我将不得不使用反射来知道一个类/属性/是否已被我的自定义装饰属性。

我也认为这是“多少你让反射调用”的事? 如果可以,我尝试缓存我的结果。 就像在我正在处理的解决方案中:在应用程序启动时,我检查特定程序集中的某些类型,这些类型是否用我的属性进行了修饰,并且我将它们保存在字典中。