反射的性能测试 记录
2005-12-23 11:52 横刀天笑 阅读(1374) 评论(1) 编辑 收藏 举报.net的反射 真可谓让人忧 让人喜
有了反射 在.net中工厂模式更容易实现 而且耦合性更低 但是 反射对性能的消耗也是不可忽视的
但是 反射对性能的损耗到底有多大?我从来没做过测试 今天无事 决定作个测试 现在将测试过程记录下来 以备以后参考:(如果大家有什么更好的测试方法 或提高性能的方法可要贴出来共享一下哦)
测试程序:(需要被反射而获得的类)
using System;
using Edot.Interface;
namespace Edot.TestReflection
{
public class A : IA
{
public A()
{
}
public void Print()
{
Console.WriteLine( "The A Class" );
}
};
}
接口:
using System;
namespace Edot.Interface
{
public interface IA
{
void Print();
}
}
用反射创建类的类:
using System;
using System.Reflection;
using Edot.Interface;
namespace Edot.Create
{
public class Create
{
private static IA _ia = null;
public Create()
{
}
public static IA CreateA()
{
if ( _ia == null )
{
Type[] type = new Type[]{};
ConstructorInfo ctor = Assembly.LoadFrom( "A.dll" ).GetType( "Edot.TestReflection.A" ).GetConstructor( type );
_ia = ctor.Invoke( type ) as IA;
}
return _ia;
}
};
}
测试类:
using System;
using Edot.Interface;
namespace Edot.Test
{
public class Test
{
public Test()
{
}
public static void Main()
{
Console.WriteLine( DateTime.Now.ToString( "mm:ss:fffff" ) );
IA ia = Edot.Create.Create.CreateA();
ia.Print();
Console.WriteLine( DateTime.Now.ToString( "mm:ss:fffff" ) );
Console.ReadLine();
}
};
}
最后获得的结果:
从结果 我们可以看出 反射的性能并不是被那些书上说的一无是处
也许这个程序太小 看不出
但是 如果我们使用一些性能优化的方法 性能可能进一步提高
下面我们对不使用反射的情况测试一下 修改 使用反射创建类的类
为(不使用反射):
using System;
using System.Reflection;
using Edot.Interface;
using Edot.TestReflection;
namespace Edot.Create
{
public class Create
{
private static IA _ia = null;
public Create()
{
}
public static IA CreateA()
{
if ( _ia == null )
{
_ia = new A();
}
return _ia;
}
};
}
结果如下图:
看到结果 你也许很惊讶 反射对性能的消耗并不是特别大阿
而且使用反射 程序耦合度几乎降到 “0”是几乎阿 呵呵
我觉得为使程序的扩展性好 这么一点点损耗是值得的 而且我们还可以使用很多技术来优化 反射 比如
缓存阿
上面只是个人愚见 各位仁兄 有何见教:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?