C# 7.2 中 In参数( in parameter )的性能比较

结论:in参数的性能要优于普通参数非常多。

如下图所示,分别创建 40 和 10000 个结构体,进行下面的测试:

- InParameters: 使用in参数调用方法

- InParameters2: 使用in参数调用方法(调用方没有使用in关键字,因为是可选的,因此和InParameters结果一样)

- Normal: 普通调用方法

测试代码:

 1 using BenchmarkDotNet.Attributes;
 2 
 3 namespace RectangleGameCore.Benchmarks
 4 {
 5     /// <summary>
 6     /// 测试CSharp的In参数性能
 7     /// </summary>
 8     [MemoryDiagnoser]
 9     [RPlotExporter]
10     [BenchmarkCategory("CSharp", "InParameter")]
11     public class CSharpInParameter
12     {
13         [Params(40, 10_000)]
14         public int N;
15 
16         private MyStruct[] src;
17         private int[] dst;
18 
19         [GlobalSetup]
20         public void Setup()
21         {
22             src = new MyStruct[N];
23             dst = new int[N];
24         }
25 
26         [Benchmark(Baseline = true)]
27         public void Normal()
28         {
29             for (var i = N - 1; i >= 0; i--)
30             {
31                 dst[i] = DoSomeThing(src[i]);
32             }
33         }
34 
35         [Benchmark]
36         public void InParameter()
37         {
38             for (var i = N - 1; i >= 0; i--)
39             {
40                 dst[i] = DoSomeThing(in src[i]);
41             }
42         }
43 
44         [Benchmark]
45         public void InParameter2()
46         {
47             for (var i = N - 1; i >= 0; i--)
48             {
49                 dst[i] = DoSomeThing2(src[i]);
50             }
51         }
52 
53         private static int DoSomeThing(MyStruct s) => s.X + s.Y + s.Z;
54         private static int DoSomeThing(in MyStruct s) => s.X + s.Y + s.Z;
55         private static int DoSomeThing2(in MyStruct s) => s.X + s.Y + s.Z;
56 
57 
58         private readonly struct MyStruct
59         {
60             public int X { get; }
61             public int Y { get; }
62             public int Z { get; }
63 
64             public MyStruct(int N)
65             {
66                 X = N;
67                 Y = N;
68                 Z = N;
69             }
70         }
71     }
72 }

猜你喜欢

转载自www.cnblogs.com/Bob-wei/p/13399757.html
今日推荐