c# - .NET反射的 "cost"是什么?

标签 c# .net optimization reflection

<分区>

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/

相关文章:

C#:是否可以使用标签代替带有 String.Format 的数字?

c# - 如何在 C# 中将查询字符串添加到 HttpClient.BaseAdress 中?

c# - 传入字典的模型项的类型为 'System.Threading.Tasks.Task` 1[System.Collections.Generic.IEnumerable`

c# - 如何使用反射获取命名空间、类、方法及其参数

algorithm - 具有多项分配的匈牙利算法

c# - 在运行时向 ToolStrip 添加项

c# - 方法 'Open' 没有重载需要 1 个或多个参数

.net - .Net:尝试…捕捉偏执狂-它在哪里结束?

matlab公式优化: Radial Basis Function

windows - 在 DLL 中使用 cpu 特定功能有哪些标准技术?