Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

172 rindas
7.5 KiB

  1. using BenchmarkDotNet.Attributes;
  2. using BenchmarkDotNet.Configs;
  3. using BenchmarkDotNet.Environments;
  4. using BenchmarkDotNet.Jobs;
  5. using BenchmarkDotNet.Toolchains.CsProj;
  6. using JT808.Protocol.Extensions;
  7. using JT808.Protocol.MessageBody;
  8. using System;
  9. using System.Collections.Generic;
  10. namespace JT808.Protocol.Benchmark
  11. {
  12. [Config(typeof(JT808SerializerConfig))]
  13. [MarkdownExporterAttribute.GitHub]
  14. [MemoryDiagnoser]
  15. [CategoriesColumn]
  16. [GroupBenchmarksBy(BenchmarkLogicalGroupRule.ByCategory)]
  17. public class JT808SerializerContext
  18. {
  19. private byte[] bytes0x0200;
  20. private byte[] bytes0x0100;
  21. [Params(100, 10000, 100000)]
  22. public int N;
  23. private ushort MsgId0x0200;
  24. private ushort MsgId0x0100;
  25. JT808Serializer JT808Serializer;
  26. [GlobalSetup]
  27. public void Setup()
  28. {
  29. JT808Serializer = new JT808Serializer();
  30. bytes0x0200 = "7E0200005C11223344556622B8000000010000000200BA7F0E07E4F11C0028003C00001807151010100104000000640202003703020038040200011105010000000112060100000001011307000000020022012504000000172A0200F42B04000000F2300102310105167E".ToHexBytes();
  31. MsgId0x0200 = Enums.JT808MsgId.位置信息汇报.ToUInt16Value();
  32. MsgId0x0100 = Enums.JT808MsgId.终端注册.ToUInt16Value();
  33. bytes0x0100 = "7E 01 00 00 2D 00 01 23 45 67 89 00 0A 00 28 00 32 31 32 33 34 30 73 6D 61 6C 6C 63 68 69 31 32 33 30 30 30 30 30 30 30 30 30 43 48 49 31 32 33 30 01 D4 C1 41 31 32 33 34 35 BA 7E".ToHexBytes();
  34. }
  35. [Benchmark(Description = "0x0200_All_AttachId_Serialize"), BenchmarkCategory("0x0200Serializer")]
  36. public void TestJT808_0x0200_All_AttachId_Serialize()
  37. {
  38. for (int i = 0; i < N; i++)
  39. {
  40. JT808Package jT808Package = new JT808Package();
  41. jT808Package.Header = new JT808Header
  42. {
  43. MsgId = MsgId0x0200,
  44. MsgNum = 8888,
  45. TerminalPhoneNo = "112233445566",
  46. };
  47. JT808_0x0200 jT808UploadLocationRequest = new JT808_0x0200();
  48. jT808UploadLocationRequest.AlarmFlag = 1;
  49. jT808UploadLocationRequest.Altitude = 40;
  50. jT808UploadLocationRequest.GPSTime = DateTime.Parse("2018-07-15 10:10:10");
  51. jT808UploadLocationRequest.Lat = 12222222;
  52. jT808UploadLocationRequest.Lng = 132444444;
  53. jT808UploadLocationRequest.Speed = 60;
  54. jT808UploadLocationRequest.Direction = 0;
  55. jT808UploadLocationRequest.StatusFlag = 2;
  56. jT808UploadLocationRequest.JT808LocationAttachData = new Dictionary<byte, JT808_0x0200_BodyBase>();
  57. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x01, new JT808_0x0200_0x01
  58. {
  59. Mileage = 100
  60. });
  61. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x02, new JT808_0x0200_0x02
  62. {
  63. Oil = 55
  64. });
  65. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x03, new JT808_0x0200_0x03
  66. {
  67. Speed=56
  68. });
  69. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x04, new JT808_0x0200_0x04
  70. {
  71. EventId=1
  72. });
  73. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x11, new JT808_0x0200_0x11
  74. {
  75. AreaId=1,
  76. JT808PositionType= Enums.JT808PositionType.圆形区域
  77. });
  78. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x12, new JT808_0x0200_0x12
  79. {
  80. AreaId = 1,
  81. JT808PositionType = Enums.JT808PositionType.圆形区域,
  82. Direction= Enums.JT808DirectionType.出
  83. });
  84. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x13, new JT808_0x0200_0x13
  85. {
  86. DrivenRoute= Enums.JT808DrivenRouteType.过长,
  87. DrivenRouteId=2,
  88. Time=34
  89. });
  90. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x25, new JT808_0x0200_0x25
  91. {
  92. CarSignalStatus=23
  93. });
  94. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x2A, new JT808_0x0200_0x2A
  95. {
  96. IOStatus=244
  97. });
  98. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x2B, new JT808_0x0200_0x2B
  99. {
  100. Analog = 242
  101. });
  102. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x30, new JT808_0x0200_0x30
  103. {
  104. WiFiSignalStrength=0x02
  105. });
  106. jT808UploadLocationRequest.JT808LocationAttachData.Add(JT808Constants.JT808_0x0200_0x31, new JT808_0x0200_0x31
  107. {
  108. GNSSCount=0x05
  109. });
  110. jT808Package.Bodies = jT808UploadLocationRequest;
  111. var result = JT808Serializer.Serialize(jT808Package);
  112. }
  113. }
  114. [Benchmark(Description = "0x0200_All_AttachId_Deserialize"), BenchmarkCategory("0x0200Serializer")]
  115. public void TestJT808_0x0200_Deserialize()
  116. {
  117. for (int i = 0; i < N; i++)
  118. {
  119. var result = JT808Serializer.Deserialize(bytes0x0200);
  120. }
  121. }
  122. [Benchmark(Description = "0x0100Serialize"), BenchmarkCategory("0x0100Serializer")]
  123. public void TestJT808_0x0100_Serialize()
  124. {
  125. for (int i = 0; i < N; i++)
  126. {
  127. JT808Package jT808Package = new JT808Package();
  128. jT808Package.Header = new JT808Header
  129. {
  130. MsgId = MsgId0x0100,
  131. MsgNum = (ushort)(i + 1),
  132. TerminalPhoneNo = "112233445566",
  133. };
  134. JT808_0x0100 jT808_0X0100 = new JT808_0x0100();
  135. jT808_0X0100.AreaID = 12345;
  136. jT808_0X0100.CityOrCountyId = 23454;
  137. jT808_0X0100.PlateColor = 0x02;
  138. jT808_0X0100.PlateNo = "测A123456";
  139. jT808_0X0100.TerminalId = "1234567";
  140. jT808_0X0100.TerminalModel = "1234567890000";
  141. jT808_0X0100.MakerId = "12345";
  142. jT808Package.Bodies = jT808_0X0100;
  143. var result = JT808Serializer.Serialize(jT808Package);
  144. }
  145. }
  146. [Benchmark(Description = "0x0100Deserialize"), BenchmarkCategory("0x0100Serializer")]
  147. public void TestJT808_0x0100_Deserialize()
  148. {
  149. for (int i = 0; i < N; i++)
  150. {
  151. var result = JT808Serializer.Deserialize(bytes0x0100);
  152. }
  153. }
  154. }
  155. public class JT808SerializerConfig : ManualConfig
  156. {
  157. public JT808SerializerConfig()
  158. {
  159. Add(Job.Default.WithGcServer(false).With(CsProjCoreToolchain.NetCoreApp22).With(Platform.AnyCpu));
  160. Add(Job.Default.WithGcServer(false).With(CsProjCoreToolchain.NetCoreApp30).With(Platform.AnyCpu));
  161. }
  162. }
  163. }