.net 反射应在多大程度上使用?
我们在一个项目中遇到了一个非常棘手的情况。在我们的项目中,我们使用了很多反思 我们有.net 反射应在多大程度上使用?,.net,reflection,.net,Reflection,我们在一个项目中遇到了一个非常棘手的情况。在我们的项目中,我们使用了很多反思 我们有 属性和反射驱动的验证框架 使用属性和反射将数据行转换为实体对象的扩展方法,反之亦然。与我们对DataTable和EntityCollections所做的相同 在通用EntityComparer类上实现的IComparer接口,该类使用反射来比较两个实体对象 与上述场景一样,我们在应用程序的许多其他部分使用了反射。使用反射后,我们注意到应用程序使用反射进行了更多的处理周期 我们应该在多大程度上在项目中使用反射
- 属性和反射驱动的验证框架
- 使用属性和反射将数据行转换为实体对象的扩展方法,反之亦然。与我们对DataTable和EntityCollections所做的相同
- 在通用EntityComparer类上实现的IComparer接口,该类使用反射来比较两个实体对象
我们应该在多大程度上在项目中使用反射?在处理方面,项目中受反射影响最大的领域是什么?哪里的反射不会对性能产生任何影响?关于使用反射有什么指导原则吗?如果鞋子合适,就穿上它。。。如果它解决了手头的问题,并且不会导致通过某种测试(最好是分析器)测量的过度处理,那么就不用担心了。有很多问题很容易通过反思来解决
关于决定不使用反射,我唯一的指导原则是使用反射来获取您通常无法访问的属性(即其他类中的私有属性)。您的非功能性需求/QoS应该决定是否适合使用反射,以及我的评论、测试、测试、测试(单元、性能测试等)。如果您的客户对性能感到满意,我会说去做。正确使用它可以而且确实会带来一定的生产率提高
就我个人而言,我会选择尽可能不使用反射。反射可以为扩展性和灵活性提供真正的好处。使用反射时会对性能造成影响,但这不会立即让你感到不快,特别是如果它给你带来更多好处的话。尽量少用反射,但不要认为使用反射会带来很大的伤害恩,你需要这样做。这篇文章在这方面很好:
我的建议是,总是先尝试找到面向对象的解决方案,而不是一有机会就诉诸于反射。反射可能更容易完成一些事情,但使用OO解决方案,代码通常会更有条理,并且您可以摆脱反射的开销
在我作为开发人员的几年中,我只使用过反射两次……第一次是访问某个私有变量以获取web请求的上载进度。第二次是在从数据读取器读取数据时动态创建对象实例,我后来很高兴用一个通用的解决方案来替换它。反射功能强大,但它已经成功缺点。通常情况下,尝试不使用它进行编码-但它对于“框架”库非常有用,因为您对实际对象的了解很少/有限;例如:
- ORM/DAL工具(加载/保存任意数据)
- 数据绑定
- 系列化
- 通过使用(作为键入的委托;不要使用
)DynamicInvoke
- 通过编写动态IL
- 通过在.NET 3.5中使用
表达式
PropertyDescriptor
API中封装了自定义IL(用于成员访问),使其非常快速但不费力。您的问题提到了数据表和实体;这听起来很像,我使用HyperDescriptor做了一些度量,其中包含摘要(以毫秒为单位):
所以我的“接受”:
- 在应用程序中;很少-通常作为最后手段
- 在您的公共库中;如果合适(注意,接口等在可能的情况下更可取)
Vanilla 27179
Hyper 6997