1
1

TreeTest.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using BenchmarkDotNet.Attributes;
  2. using Masuit.Tools.Models;
  3. namespace BenchmarkTest;
  4. [MemoryDiagnoser]
  5. public class TreeTest
  6. {
  7. public List<MyClass> Tree { get; set; }
  8. public List<MyClass> List { get; set; }
  9. public TreeTest()
  10. {
  11. List = new List<MyClass>()
  12. {
  13. new MyClass
  14. {
  15. Name = "Root",
  16. Id = 1
  17. }
  18. };
  19. for (int i = 2; i < 2000; i++)
  20. {
  21. List.Add(new MyClass
  22. {
  23. Name = $"这是第{i}个子节点",
  24. Id = i,
  25. ParentId = (i - 1)
  26. });
  27. }
  28. Tree = List.ToTree();
  29. }
  30. [Benchmark]
  31. public void BuildTree()
  32. {
  33. _ = List.ToTree();
  34. }
  35. [Benchmark]
  36. public void FilterNode()
  37. {
  38. var nodes = Tree.Filter(x => x.Name.Contains("514")).ToList();
  39. }
  40. [Benchmark]
  41. public void FlattenNode()
  42. {
  43. var nodes = List[1500].Flatten().ToList();
  44. }
  45. [Benchmark]
  46. public void FindRoot()
  47. {
  48. var root = List[1990].Root();
  49. }
  50. [Benchmark]
  51. public void FindAllChildren()
  52. {
  53. var children = List[1990].AllChildren();
  54. }
  55. [Benchmark]
  56. public void FindAllParents()
  57. {
  58. var children = List[1990].AllParent();
  59. }
  60. [Benchmark]
  61. public void FindLevel()
  62. {
  63. var children = List[1990].Level();
  64. }
  65. [Benchmark]
  66. public void GetPath()
  67. {
  68. var children = List[1990].Path();
  69. }
  70. }
  71. public class MyClass : ITree<MyClass>, ITreeEntity<MyClass, int>
  72. {
  73. /// <summary>
  74. /// 子级
  75. /// </summary>
  76. public ICollection<MyClass> Children { get; set; }
  77. /// <summary>
  78. /// 主键id
  79. /// </summary>
  80. public int Id { get; set; }
  81. /// <summary>
  82. /// 父级id
  83. /// </summary>
  84. public int? ParentId { get; set; }
  85. /// <summary>
  86. /// 父节点
  87. /// </summary>
  88. public MyClass Parent { get; set; }
  89. /// <summary>
  90. /// 名字
  91. /// </summary>
  92. public string Name { get; set; }
  93. }