/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Tools/IdeCoreBenchmarks/SegmentedDictionaryBenchmarks_Add.cs
94 строки
3 KB
Todd Grunke
Reuse segments during SegmentedDictionary growth (#75943)
21 ноя 2024, 20:11
Не верифицирован
21 ноя 2024, 20:11
b8bc872
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using BenchmarkDotNet.Attributes; using Microsoft.CodeAnalysis.Collections; namespace IdeCoreBenchmarks { [MemoryDiagnoser] public class SegmentedDictionaryBenchmarks_Add { [Params(1_000, 10_000, 100_000, 1_000_000)] public int Count { get; set; } private int[]? _intItems; private object[]? _objectItems; private LargeStruct[]? _largeItems; private EnormousStruct[]? _enormousItems; [IterationSetup] public void IterationSetup() { _intItems = new int[Count]; _objectItems = new object[Count]; _largeItems = new LargeStruct[Count]; _enormousItems = new EnormousStruct[Count]; for (var i = 0; i < Count; i++) { _intItems[i] = i; _objectItems[i] = new object(); _largeItems[i] = new LargeStruct() { s1 = new MediumStruct() { i1 = i } }; _enormousItems[i] = new EnormousStruct() { s1 = _largeItems[i] }; } } [Benchmark] public void AddIntToList() => AddToList(_intItems!); [Benchmark] public void AddObjectToList() => AddToList(_objectItems!); [Benchmark] public void AddLargeStructToList() => AddToList(_largeItems!); [Benchmark] public void AddEnormousStructToList() => AddToList(_enormousItems!); private void AddToList<T>(T[] items) where T : notnull { var dict = new SegmentedDictionary<T, T>(); var iterations = Count; for (var i = 0; i < iterations; i++) dict.Add(items[i], items[i]); } private struct MediumStruct { public int i1 { get; set; } public int i2 { get; set; } public int i3 { get; set; } public int i4 { get; set; } public int i5 { get; set; } } private struct LargeStruct { public MediumStruct s1 { get; set; } public MediumStruct s2 { get; set; } public MediumStruct s3 { get; set; } public MediumStruct s4 { get; set; } } private struct EnormousStruct { public LargeStruct s1 { get; set; } public LargeStruct s2 { get; set; } public LargeStruct s3 { get; set; } public LargeStruct s4 { get; set; } public LargeStruct s5 { get; set; } public LargeStruct s6 { get; set; } public LargeStruct s7 { get; set; } public LargeStruct s8 { get; set; } public LargeStruct s9 { get; set; } public LargeStruct s10 { get; set; } } } }