首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Reflection vs泛型-性能

System.Reflection vs泛型-性能
EN

Stack Overflow用户
提问于 2012-04-18 11:28:26
回答 6查看 2.1K关注 0票数 6

我将在服务器应用程序上编写一组方法,这些方法接收从TCP套接字接收的消息,对它们进行编码/解码,然后对它们进行加密/解密。

考虑到消息被定义为特殊类型,每个类型都有自己的一组属性和总长度,我需要选择以下解决方案之一: 1.创建使用泛型的方法,例如Encode<T>(...) where T : IMessage,然后为每种类型的消息实现编码器/解码器,并让ResolveEncoder<T>为所需的消息选择编码器。2.创建使用任何类型的消息的方法,只要它实现了IMessage,例如Encode(IMessage message),并使用System.Reflection来确定我需要了解的所有信息。

我对解决方案#2更感兴趣,因为它使我的代码小了30倍。但是,我担心属性的持续反射是否会影响性能。现在由于我完成这个项目的时间有限,我不能真正的“实验”。

我将非常感谢任何个人经验或与基准测试的链接,了解这两种解决方案的性能如何下降。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-04-18 11:55:16

反射可以足够快。但是需要正确地实现。

反射性能-

快速和轻量功能

代码语言:javascript
复制
typeof
Object.GetType
typeof == Object.GetType
Type equivalence APIs (including typehandle operator overloads)
get_Module
get_MemberType
Some of the IsXX predicate APIs
New token/handle resolution APIs in the .NET Framework 2.0

代价高昂的函数

代码语言:javascript
复制
GetXX  APIs (MethodInfo, PropertyInfo, FieldInfo, and so on)
GetCustomAttributes
Type.InvokeMember
Invoke APIs (MethodInfo.Invoke, FieldInfo.GetValue, and so on)
get_Name (Name property)
Activator.CreateInstance

Source - Dodge Common Performance Pitfalls to Craft Speedy Applications

MethodInfo可以加速- Improving performance reflection , what alternatives should I consider

好的链接:

How costly is .NET reflection?

http://www.codeproject.com/Articles/18450/HyperDescriptor-Accelerated-dynamic-property-acces

票数 4
EN

Stack Overflow用户

发布于 2012-04-18 11:38:15

现在,由于我完成这个项目的时间有限,我不能真正地“实验”。

那么,您真正的约束不是性能,而是您可以在给定的时间约束内编写、测试和调试的代码。假设你声称反射版本要小30倍,这听起来就是你应该倾向于的。

然而,有五点:

我怀疑30倍的估计是正确的,smaller.

  • Reflection的性能可能会比使用泛型差很多。that.

  • "However,是毫无疑问的,我担心持续的属性反射是否会影响性能。“你可以通过积极地缓存PropertyInfo来缓解这种情况,而且你不能通过reflection.

  • You加载的东西可以做一些类似于使用表达式树的反射的事情,你会看到这样做会有很大的性能提升。这里有一个blog post,它将推动你在这个问题上朝着正确的方向前进。但是,如果你还不熟悉表达式树的工作,考虑到你的时间限制,使用一个你不熟悉的概念进行编码,测试和调试是有风险的,with.

  • Are你确定这是一个性能瓶颈吗?如果网络延迟在这里占主导地位,而你过早地进行了优化,我不会感到震惊。
票数 6
EN

Stack Overflow用户

发布于 2012-04-18 11:35:06

泛型是在编译时绑定的,其性能与普通类型一样好。反思将会付出巨大的代价。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10202365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档