3 .Net 7内容汇总--反射优化( 二 )

Method
Runtime
Mean
Ratio
Allocated
【3 .Net 7内容汇总--反射优化】Alloc Ratio
CreateInstance
.NET 6.0
167.8 ns
1.00
320 B
1.00
CreateInstance
.NET 7.0
143.4 ns
0.85
200 B
0.62
我们再回到AssemblyName来,AssemblyName里把AssemblyName.FullName的实现由StringBuilder改为了ArrayPool<char>,所以:
private AssemblyName[] _names = AppDomain.CurrentDomain.GetAssemblies().Select(a => new AssemblyName(a.FullName)).ToArray();[Benchmark]public int Names(){int sum = 0;foreach (AssemblyName name in _names){sum += name.FullName.Length;}return sum;}Method
Runtime
Mean
Ratio
Allocated
Alloc Ratio
Names
.NET 6.0
3.423 us
1.00
9.14 KB
1.00
Names
.NET 7.0
2.010 us
0.59
2.43 KB
0.27
另外由于JIT编译器又进化了,现在可以在编译过程中计算结果,所以:
[Benchmark]public bool IsByRefLike() => typeof(ReadOnlySpan<char>).IsByRefLike;Method
Runtime
Mean
Ratio
Code Size
IsByRefLike
.NET 6.0
2.1322 ns
1.00
31 B
IsByRefLike
.NET 7.0
0.0000 ns
0.00
6B
是的,你没看错,时间是0,因为这里在运行的时候已经不需要计算了,直接就是个赋值操作,所以这个时间就 。。。
我们来看一下生成的汇编
; Program.IsByRefLike()moveax,1ret; Total bytes of code 6这就是反射优化的主要内容 。反正就高喊666,知道反射又快了,用起来心里负担又小了就搞定了^ ^ 。

经验总结扩展阅读