测试环境
- SDK:5.0.100-preview.7.20366.6
- CPU:Intel Core i7 - 6700
- Any CPU
- Release
测试代码
using System;
using System.Diagnostics;while (true)
{Test("非泛型", () =>{MyStruct1 myStruct = default;for (int i = 0; i < 100000000; i++){myStruct.Data1 += 3;myStruct.Data2 -= 7;myStruct.Data3 *= 12;myStruct.Data4 /= 6;myStruct.Data1 /= 2;myStruct.Data2 /= 4;myStruct.Data1 += 3;myStruct.Data2 -= 7;myStruct.Data3 *= 12;myStruct.Data4 /= 6;myStruct.Data1 /= 2;myStruct.Data2 /= 4;myStruct.Data1 += 3;myStruct.Data2 -= 7;myStruct.Data3 *= 12;myStruct.Data4 /= 6;myStruct.Data1 /= 2;myStruct.Data2 /= 4;myStruct.Data1 += 3;myStruct.Data2 -= 7;myStruct.Data3 *= 12;myStruct.Data4 /= 6;myStruct.Data1 /= 2;myStruct.Data2 /= 4;}return myStruct.Data1 + myStruct.Data2 + myStruct.Data3 + myStruct.Data4;});Test("泛型", () =>{MyStruct2<double> myStruct = default;for (int i = 0; i < 100000000; i++){myStruct.Data1 += 3;myStruct.Data2 -= 7;myStruct.Data3 *= 12;myStruct.Data4 /= 6;myStruct.Data1 /= 2;myStruct.Data2 /= 4;myStruct.Data1 += 3;myStruct.Data2 -= 7;myStruct.Data3 *= 12;myStruct.Data4 /= 6;myStruct.Data1 /= 2;myStruct.Data2 /= 4;myStruct.Data1 += 3;myStruct.Data2 -= 7;myStruct.Data3 *= 12;myStruct.Data4 /= 6;myStruct.Data1 /= 2;myStruct.Data2 /= 4;myStruct.Data1 += 3;myStruct.Data2 -= 7;myStruct.Data3 *= 12;myStruct.Data4 /= 6;myStruct.Data1 /= 2;myStruct.Data2 /= 4;}return myStruct.Data1 + myStruct.Data2 + myStruct.Data3 + myStruct.Data4;});
}static void Test(string name, Func<object> action)
{var sw = new Stopwatch();sw.Start();var result = action();var ms = sw.ElapsedMilliseconds;Console.WriteLine(name + ":" + result + " " + ms + "ms");
}internal struct MyStruct1
{public double Data1, Data2, Data3, Data4;
}internal struct MyStruct2<T>
{public T Data1, Data2, Data3, Data4;
}
测试结果
泛型:0.666666666666667 1917ms
非泛型:0.666666666666667 1906ms
泛型:0.666666666666667 1916ms
非泛型:0.666666666666667 1931ms
泛型:0.666666666666667 1950ms
非泛型:0.666666666666667 1944ms
泛型:0.666666666666667 1958ms
非泛型:0.666666666666667 1926ms
泛型:0.666666666666667 1928ms
非泛型:0.666666666666667 1921ms
泛型:0.666666666666667 1932ms
非泛型:0.666666666666667 1931ms
……
结论
泛型结构和非泛型结构的性能没有明显差别