Possible Duplicate:
How costly is .NET reflection?

我现在有一种编程心态,认为反射是我最好的朋友.我经常使用它来动态加载允许"松散实现"而不是严格接口的内容,以及许多自定义属性.

使用反射的"真正"成本是多少?

对于频繁反射的类型来说,缓存反射是否值得,比如我们自己的预LINQ DAL对象代码对所有属性到表定义进行缓存反射?

缓存内存占用是否会超过反射CPU使用率?

推荐答案

反射需要加载并处理大量类型元数据.这可能会导致更大的内存开销和更慢的执行.根据this article,属性修改大约慢2.5x-3x,方法调用慢3.5x-4x.

下面是一篇优秀的MSDN article篇文章,概述了如何加快反射速度,以及开销在哪里.如果你想了解更多,我强烈建议你阅读.

还有一个复杂的因素,反射可能会增加代码的复杂性,这使得代码更加混乱,因此难以处理.有些人,比如Scott Hanselman人,相信通过反思,你经常制造出比你解决的问题更多的问题.如果你的团队大多是初级开发人员,情况尤其如此.

如果需要很多动态行为,那么最好查看DLR(动态语言运行时).随着新变化的到来.NET 4.0您可能想看看是否可以将其中的一部分合并到您的解决方案中.VB和C增加了对动态的支持,使得使用动态代码非常优雅,创建自己的动态对象非常简单.

祝你好运

编辑:我在斯科特的网站上做了更多的搜索,在反思中找到了这podcast个.我没听过,但可能值得一段时间.

.net相关问答推荐

通过交互服务器渲染模式和流渲染的组合防止双重渲染

Azure管道-使用.NET 8 RC2 SDK生成C#项目失败

使用React路由加载器获取数据不能正常工作

.NET最小API BadRequest响应不返回正文

如何判断属性设置器是否公开

将日期时间转换为日期格式 dd/mm/yyyy

根源是什么?

如何解决请确保文件可访问并且它是有效的程序集或 COM 组件?

我可以从 .NET/C# 获取其他进程的命令行参数吗?

注册 COM 互操作与使程序集 COM 可见

覆盖方法上的 C# 可选参数

react 式扩展使用的好例子

多个添加的实体可能具有相同的主键

使用 XmlDocument 读取 XML 属性

是否可以在 XP 上运行 .NET 4.5 应用程序?

MVC4 HTTP 错误 403.14 - 禁止

如何从 HashSet 中检索实际项目?

浮动与双重性能

MVVM 没有意义吗?

Roslyn 编译代码失败