<分区>
Possible Duplicate:
How costly is .NET reflection?
我目前的编程心态是反射是我最好的 friend 。我经常使用它来动态加载允许“松散实现”而不是严格接口(interface)的内容,以及大量自定义属性。
使用反射的“实际”成本是多少?
是否值得为频繁反射的类型付出缓存反射的努力,例如我们自己在表定义的所有属性上的预 LINQ DAL 对象代码?
缓存内存占用是否会超过反射 CPU 使用率?
<分区>
Possible Duplicate:
How costly is .NET reflection?
我目前的编程心态是反射是我最好的 friend 。我经常使用它来动态加载允许“松散实现”而不是严格接口(interface)的内容,以及大量自定义属性。
使用反射的“实际”成本是多少?
是否值得为频繁反射的类型付出缓存反射的努力,例如我们自己在表定义的所有属性上的预 LINQ DAL 对象代码?
缓存内存占用是否会超过反射 CPU 使用率?
最佳答案
反射需要加载和处理大量的类型元数据。这会导致更大的内存开销和更慢的执行速度。根据this article属性修改大约慢 2.5-3 倍,方法调用大约慢 3.5-4 倍。
这是一个很好的 MSDN article概述如何使反射更快以及开销在哪里。如果您想了解更多信息,我强烈建议您阅读。
还有一个复杂的元素,反射可以添加到代码中,使其更加困惑,因此难以使用。有些人,比如 Scott Hanselman相信通过使用反射(reflection),你经常会遇到比你解决的问题更多的问题。如果您的团队主要是初级开发人员,情况尤其如此。
如果您需要大量动态行为,您最好研究一下 DLR(动态语言运行时)。随着 .NET 4.0 中的新变化,您可能想看看是否可以将其中的一些合并到您的解决方案中。 VB 和 C# 对动态的额外支持使得动态代码的使用变得非常优雅,创建您自己的动态对象也相当直接。
祝你好运。
编辑:我在 Scott 的网站上做了更多搜索,发现了这个 podcast反射(reflection)。我没有听过,但可能值得。
关于c# - .NET反射的 "cost"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/224232/