C#中使用反射的性能分析

C#中使用反射的性能分析,第1张

C#中使用反射的性能分析,第2张

最近,在研究一个可配置系统的框架时,反射方法在代码中被广泛使用。虽然其他语言如Java的反射性能很差,但认为既然C#是强类型语言,那么在AppDomain中调用类的性能应该不会差太多。
今天在mvp网站上看到有人说反射的性能很差。为了避免使用它,我写了一个简单的例子来测试它。
测试类如下:
命名空间反射test.test
{
公共c类测试器[/br] {[/br
}

public void test1()
{
a =(a-0.0001)* 1.0001;
}
私双a;
public double geta(){ return a;}
}
}
首先我们测试对象的结构
测试代码如下
privatevidtest 1()
{
label 1 . text = " ";
label3。Text =
DateTime now =日期时间。现在;

for(int I = 0;i < 1000i++)
{
for(int j = 0;j < 100j++)
{

c tester aTest = new c tester();
}
}

TimeSpan spand =日期时间。现在-现在;
标签1。Text = "过去的时光"+ spand。ToString();
}

private void test2()
{
label 2。Text =
标签4。Text =
DateTime now =日期时间。现在;

for(int I = 0;i < 1000i++)
{
for(int j = 0;j < 100j++)
{
Type the test = Type。GetType("ReflectionTest。test . CT ester ");
object theobj = theTest。InvokeMember(null,BindingFlags。CreateInstance
,null,null,null);
}
}

TimeSpan spand =日期时间。现在-现在;
label2。Text = "过去的时光"+ spand。ToString();
}
测试结果直呼时间约16ms,而反射呼叫时间始终约5s 520ms,直呼效率近350倍。
对于这个测试,有意思的是:
如果test2中测试的类型= type . gettype(" reflection test . test . c tester ");
如果移出循环,对应的运行时间会下降到1s 332 ms,效率相差20倍左右。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C#中使用反射的性能分析

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情