【发布时间】:2013-07-29 20:50:48
【问题描述】:
我看过很多关于 .NET 反射性能的文章,我知道使用反射调用方法和检索属性值的性能代价很高,而且它比直接调用慢大约 2 到 3 倍。
但是类型信息和属性呢?我知道 Types 元数据缓存在 .NET 中...所以我认为它的性能成本不应该很高,它类似于在字典或列表中搜索(但我不确定)...
检查类型信息以检查属性类型并获取属性类型的自定义属性有多慢?
根据属性使许多事情起作用是不好的做法和设计吗?
我想做的是为 ASP.NET 创建一些基础结构,它将检查自定义属性的许多控件和类型,以便检索有关应在页面上注册的所需 JavaScript 文件和客户端代码的信息。
【问题讨论】:
-
与什么相比,它的表现如何?对于检索属性值、调用方法等,使用反射执行此操作与不使用反射执行此操作之间存在明显差异。但是你不能说“通过反射获取类型信息比不使用反射要慢”,因为没有反射就无法获得。
-
即使反射比非反射代码慢,但总的来说还是相当快的。如果您将只使用 to 检查 ASP.NET 页面上的属性作为请求-响应生命周期的一部分,那么我严重怀疑您是否会对使用就这样反思,所以去镇上。 通常当您在紧密循环中每秒遇到数百或数千次反射时,会出现性能问题。最后,您的里程会有所不同,我建议您进行测试并确保您没有性能问题。
-
@hvd 我理解,但是如果我使用 OOP(接口/抽象等)来做这个会慢得多......它可能会起作用,但我的基础设施将是不太灵活...
-
@AlexDn:由于这只是 ASP.NET 请求-响应的东西,我建议您使用灵活/可维护的基础架构。我怀疑您会从中获得重大的性能影响(仅网络通信将远远超过您可能对反射所做的任何事情)。如果您最终构建了一个反射成为可衡量问题的服务,那么您可能会获得足够的系统流量/使用率,这将是一个好有问题。 :)
-
@AlexDn 您应该能够缓存大量信息,并避免在每次请求时重新计算。如果你做对了,你将不需要每分钟约 40000 次检查,并且它不应该对性能产生可衡量的影响。 (但如果你做的不对,我真的不知道反射的效果如何。)
标签: c# .net performance reflection attributes