using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using BenchmarkDotNet; using BenchmarkDotNet.Attributes; using BenchMarkDotnetStudy.Core; namespace BenchMarkDotnetStudy.BenchmarkStudy { /// /// Counter 基准测试 /// public class CounterTest2 { [Benchmark] public void Thread32_Test() { Counter counter = new Counter(); List threads = new List() { new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), new Thread(() => counter.Increment() ), }; threads.ForEach(t => t.Start()); threads.ForEach(t => t.Join()); Console.WriteLine($"方法结束时:TotalCounter = {Counter.TotalCounter}"); } [Benchmark] public void Thread32_Test2() { Counter counter = new Counter(); List threads = new List() { new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), new Thread(() => counter.IncrementWithInterlocked() ), }; threads.ForEach(t => t.Start()); threads.ForEach(t => t.Join()); } } }