using BenchmarkDotNet.Attributes; using Masuit.Tools.Models; namespace BenchmarkTest; [MemoryDiagnoser] public class TreeTest { public List Tree { get; set; } public List List { get; set; } public TreeTest() { List = new List() { new MyClass { Name = "Root", Id = 1 } }; for (int i = 2; i < 2000; i++) { List.Add(new MyClass { Name = $"这是第{i}个子节点", Id = i, ParentId = (i - 1) }); } Tree = List.ToTree(); } [Benchmark] public void BuildTree() { _ = List.ToTree(); } [Benchmark] public void FilterNode() { var nodes = Tree.Filter(x => x.Name.Contains("514")).ToList(); } [Benchmark] public void FlattenNode() { var nodes = List[1500].Flatten().ToList(); } [Benchmark] public void FindRoot() { var root = List[1990].Root(); } [Benchmark] public void FindAllChildren() { var children = List[1990].AllChildren(); } [Benchmark] public void FindAllParents() { var children = List[1990].AllParent(); } [Benchmark] public void FindLevel() { var children = List[1990].Level(); } [Benchmark] public void GetPath() { var children = List[1990].Path(); } } public class MyClass : ITree, ITreeEntity { /// /// 子级 /// public ICollection Children { get; set; } /// /// 主键id /// public int Id { get; set; } /// /// 父级id /// public int? ParentId { get; set; } /// /// 父节点 /// public MyClass Parent { get; set; } /// /// 名字 /// public string Name { get; set; } }