.NET反射的成本有多高?

232

我经常听到使用反射很糟糕。虽然我通常避免使用反射,并且很少发现没有反射无法解决问题的情况,但我想知道...

对于那些在应用程序中使用过反射的人,您是否测量了性能损失?它真的很糟糕吗?


您可能还想查看这个问题。https://dev59.com/w3VC5IYBdhLWcg3wpi58 - smaclell
1
使用 fasterflect.codeplex.com 上的 API。它可以将 getter / setter / invoker 和其他一些东西的反射加速约 500 倍。如果您需要扩展它,那里也有源代码和信息说明如何工作。 - Brandon Moore
3
这些信息在2014年是否准确?这4年有什么变化吗? - Arnthor
1
将值分配给实例属性的简单任务,使用反射(PropertyInfo.SetValue(instance, value))大约比直接编码(instance.property = value)慢150倍。这是在.NET 4.0中。 - Thanasis Ioannidis
13个回答

3
与所有事情一样,这都是关于评估情况。在DotNetNuke中,有一个相当核心的组件叫做FillObject,使用反射从数据行中填充对象。
这是一个相当常见的场景,MSDN上有一篇文章Using Reflection to Bind Business Objects to ASP.NET Form Controls,涵盖了性能问题。
除了性能之外,我不喜欢在特定场景中使用反射的一件事是,它倾向于减少快速查看代码的能力,对我而言,考虑到您还失去了编译时安全性,与强类型数据集或类似LINQ to SQL相比,这似乎并不值得努力。

2

反射不会显著降低您应用程序的性能。如果没有使用反射,您可能能够更快地完成某些操作,但是如果反射是实现某些功能最简单的方法,则请使用它。如果反射成为性能问题,您可以随时将代码重构为不使用反射。


1

我认为你会发现答案是:这取决于情况。如果你想把它放在你的任务列表应用程序中,那么这不是什么大问题。但如果你想把它放在Facebook的持久化库中,那就是个大问题了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接