Program.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. using AutoMapper;
  2. using Masuit.Tools.Mapping;
  3. using Masuit.Tools.Systems;
  4. using System;
  5. using System.Collections.Generic;
  6. namespace Masuit.Tools.ExpressionMapperBenchmark
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. #region 配置automapper
  13. var mapper = new MapperConfiguration(e =>
  14. {
  15. e.CreateMap<TestClassA, TestClassB>().ReverseMap();
  16. e.CreateMap<TestClassC, TestClassD>().ReverseMap();
  17. }).CreateMapper();
  18. #endregion
  19. #region 配置ExpressionMapper
  20. ExpressionMapper.CreateMap<TestClassA, TestClassB>().ReverseMap();
  21. ExpressionMapper.CreateMap<TestClassC, TestClassD>().ReverseMap();
  22. #endregion
  23. #region 造一个大对象
  24. var a = new TestClassA()
  25. {
  26. MyProperty = "ssssssssssssssssssssss",
  27. DateTime = DateTime.Now,
  28. Double = 123.33,
  29. Int = 100,
  30. TestClassC = new TestClassC()
  31. {
  32. MyProperty = "ccccccccccccccccccccccccccc",
  33. DateTime = DateTime.Now,
  34. Double = 2345.555,
  35. Int = 10100,
  36. Obj = new TestClassD()
  37. {
  38. MyProperty = "ddddddddddddddddddddddddd",
  39. Obj = new TestClassC()
  40. {
  41. MyProperty = "cccccc",
  42. DateTime = DateTime.Now,
  43. Double = 23458894.555,
  44. Int = 10100000,
  45. Obj = new TestClassD()
  46. }
  47. }
  48. },
  49. List = new List<TestClassC>()
  50. {
  51. new TestClassC()
  52. {
  53. MyProperty = "cccccc",
  54. DateTime = DateTime.Now,
  55. Double = 2345.555,
  56. Int = 10100,
  57. Obj = new TestClassD()
  58. {
  59. MyProperty = "ddddddddddddddddddddddddddddddddddd",
  60. DateTime = DateTime.Now,
  61. Double = 2345.555,
  62. Int = 10100,
  63. Obj = new TestClassC()
  64. {
  65. MyProperty = "cccccccccccccccccccccccccccccc",
  66. DateTime = DateTime.Now,
  67. Double = 2345.555,
  68. Int = 10100,
  69. Obj = new TestClassD()
  70. }
  71. }
  72. },
  73. new TestClassC()
  74. {
  75. MyProperty = "cccccc",
  76. DateTime = DateTime.Now,
  77. Double = 2345.555,
  78. Int = 10100,
  79. Obj = new TestClassD()
  80. {
  81. MyProperty = "ddddddddddddddddddddddddddddddddddd",
  82. DateTime = DateTime.Now,
  83. Double = 2345.555,
  84. Int = 10100,
  85. Obj = new TestClassC()
  86. {
  87. MyProperty = "cccccccccccccccccccccccccccccc",
  88. DateTime = DateTime.Now,
  89. Double = 2345.555,
  90. Int = 10100,
  91. Obj = new TestClassD()
  92. }
  93. }
  94. },
  95. new TestClassC()
  96. {
  97. MyProperty = "cccccc",
  98. DateTime = DateTime.Now,
  99. Double = 2345.555,
  100. Int = 10100,
  101. Obj = new TestClassD()
  102. {
  103. MyProperty = "ddddddddddddddddddddddddddddddddddd",
  104. DateTime = DateTime.Now,
  105. Double = 2345.555,
  106. Int = 10100,
  107. Obj = new TestClassC()
  108. {
  109. MyProperty = "cccccccccccccccccccccccccccccc",
  110. DateTime = DateTime.Now,
  111. Double = 2345.555,
  112. Int = 10100,
  113. Obj = new TestClassD()
  114. }
  115. }
  116. },
  117. new TestClassC()
  118. {
  119. MyProperty = "cccccc",
  120. DateTime = DateTime.Now,
  121. Double = 2345.555,
  122. Int = 10100,
  123. Obj = new TestClassD()
  124. {
  125. MyProperty = "ddddddddddddddddddddddddddddddddddd",
  126. DateTime = DateTime.Now,
  127. Double = 2345.555,
  128. Int = 10100,
  129. Obj = new TestClassC()
  130. {
  131. MyProperty = "cccccccccccccccccccccccccccccc",
  132. DateTime = DateTime.Now,
  133. Double = 2345.555,
  134. Int = 10100,
  135. Obj = new TestClassD()
  136. }
  137. }
  138. },
  139. new TestClassC()
  140. {
  141. MyProperty = "cccccc",
  142. DateTime = DateTime.Now,
  143. Double = 2345.555,
  144. Int = 10100,
  145. Obj = new TestClassD()
  146. {
  147. MyProperty = "ddddddddddddddddddddddddddddddddddd",
  148. DateTime = DateTime.Now,
  149. Double = 2345.555,
  150. Int = 10100,
  151. Obj = new TestClassC()
  152. {
  153. MyProperty = "cccccccccccccccccccccccccccccc",
  154. DateTime = DateTime.Now,
  155. Double = 2345.555,
  156. Int = 10100,
  157. Obj = new TestClassD()
  158. }
  159. }
  160. },
  161. }
  162. };
  163. #endregion
  164. var time = HiPerfTimer.Execute(() =>
  165. {
  166. a.Map<TestClassA, TestClassB>();
  167. a.Map<TestClassA, TestClassB>();
  168. });
  169. Console.WriteLine($"ExpressionMapper映射2次耗时:{time}s");
  170. time = HiPerfTimer.Execute(() =>
  171. {
  172. for (int i = 0; i < 1000000; i++)
  173. {
  174. var b = a.Map<TestClassA, TestClassB>();
  175. }
  176. });
  177. Console.WriteLine($"ExpressionMapper映射100000次耗时:{time}s");
  178. time = HiPerfTimer.Execute(() =>
  179. {
  180. mapper.Map<TestClassB>(a);
  181. mapper.Map<TestClassB>(a);
  182. });
  183. Console.WriteLine($"AutoMapper映射2次耗时:{time}s");
  184. time = HiPerfTimer.Execute(() =>
  185. {
  186. for (int i = 0; i < 1000000; i++)
  187. {
  188. var b = mapper.Map<TestClassB>(a);
  189. }
  190. });
  191. Console.WriteLine($"AutoMapper映射100000次耗时:{time}s");
  192. }
  193. }
  194. }