publicclassListBenchmark { [Benchmark] publicvoidListWithCapacity() { var list = new List<int>(1000000); for (int i = 0; i < 1000000; i++) { list.Add(i); } }
[Benchmark] publicvoidListWithoutCapacity() { var list = new List<int>(); for (int i = 0; i < 1000000; i++) { list.Add(i); } } }
[SimpleJob(RuntimeMoniker.Net70)] [SimpleJob(RuntimeMoniker.NetCoreApp31)] [MemoryDiagnoser] publicclassListBenchmark { [Benchmark] publicvoidListWithCapacity() { var list = new List<int>(1000000); for (int i = 0; i < 1000000; i++) { list.Add(i); } }
[Benchmark] publicvoidListWithoutCapacity() { var list = new List<int>(); for (int i = 0; i < 1000000; i++) { list.Add(i); } } }
运行测试
最后,我们可以使用 BenchmarkRunner 类来运行测试。这可以通过在 Main 方法中调用 BenchmarkRunner.Run<T>() 方法来实现。其中 T 是包含测试方法的类的类型。
本文通过 BenchmarkDotNet 库,使用定量对比的方式,证明了使用指定容量的 List 性能优于未指定容量的 List。这是因为指定容量的 List 在初始化时,会为其分配指定大小的内存空间,而未指定容量的 List 则会在添加元素时,根据需要动态分配内存空间。因此,使用指定容量的 List 可以减少内存分配的次数,从而提升性能。