diff --git a/BenchMarkDotnetStudy.BenchmarkStudy/BenchMarkDotnetStudy.BenchmarkStudy.csproj b/BenchMarkDotnetStudy.BenchmarkStudy/BenchMarkDotnetStudy.BenchmarkStudy.csproj
new file mode 100644
index 0000000..6115072
--- /dev/null
+++ b/BenchMarkDotnetStudy.BenchmarkStudy/BenchMarkDotnetStudy.BenchmarkStudy.csproj
@@ -0,0 +1,18 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>net7.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="BenchmarkDotNet" Version="0.13.5" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\BenchMarkDotnetStudy.Core\BenchMarkDotnetStudy.Core.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/BenchMarkDotnetStudy.BenchmarkStudy/CounterTest.cs b/BenchMarkDotnetStudy.BenchmarkStudy/CounterTest.cs
new file mode 100644
index 0000000..8795fa9
--- /dev/null
+++ b/BenchMarkDotnetStudy.BenchmarkStudy/CounterTest.cs
@@ -0,0 +1,301 @@
+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
+{
+    /// <summary>
+    /// Counter 基准测试
+    /// </summary>
+    public class CounterTest
+    {
+        [Benchmark]
+        public void Thread1_Test()
+        {
+            Counter counter = new Counter();
+            counter.Increment();
+        }
+
+        [Benchmark]
+        public void Thread2_Test()
+        {
+            Counter counter = new Counter();
+
+            List<Thread> threads = new List<Thread>()
+            {
+                new Thread(() => counter.Increment() ),
+                new Thread(() => counter.Increment() ),
+            };
+
+
+            threads.ForEach(t => t.Start());
+            threads.ForEach(t => t.Join());
+        }
+
+        [Benchmark]
+        public void Thread4_Test()
+        {
+            Counter counter = new Counter();
+
+            List<Thread> threads = new List<Thread>()
+            {
+                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());
+        }
+
+        [Benchmark]
+        public void Thread8_Test()
+        {
+            Counter counter = new Counter();
+
+            List<Thread> threads = new List<Thread>()
+            {
+                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());
+        }
+
+        [Benchmark]
+        public void Thread16_Test()
+        {
+            Counter counter = new Counter();
+
+            List<Thread> threads = new List<Thread>()
+            {
+                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());
+        }
+
+        [Benchmark]
+        public void Thread32_Test()
+        {
+            Counter counter = new Counter();
+
+            List<Thread> threads = new List<Thread>()
+            {
+                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());
+        }
+
+        [Benchmark]
+        public void Thread1_Test2()
+        {
+            Counter counter = new Counter();
+
+            counter.IncrementWithInterlocked();
+        }
+
+        [Benchmark]
+        public void Thread2_Test2()
+        {
+            Counter counter = new Counter();
+
+            List<Thread> threads = new List<Thread>()
+            {
+                new Thread(() => counter.IncrementWithInterlocked() ),
+                new Thread(() => counter.IncrementWithInterlocked() ),
+            };
+
+
+            threads.ForEach(t => t.Start());
+            threads.ForEach(t => t.Join());
+        }
+
+        [Benchmark]
+        public void Thread4_Test2()
+        {
+            Counter counter = new Counter();
+
+            List<Thread> threads = new List<Thread>()
+            {
+                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());
+        }
+
+        [Benchmark]
+        public void Thread8_Test2()
+        {
+            Counter counter = new Counter();
+
+            List<Thread> threads = new List<Thread>()
+            {
+                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());
+        }
+
+        [Benchmark]
+        public void Thread16_Test2()
+        {
+            Counter counter = new Counter();
+
+            List<Thread> threads = new List<Thread>()
+            {
+                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());
+        }
+
+        [Benchmark]
+        public void Thread32_Test2()
+        {
+            Counter counter = new Counter();
+
+            List<Thread> threads = new List<Thread>()
+            {
+                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());
+        }
+    }
+}
diff --git a/BenchMarkDotnetStudy.BenchmarkStudy/CounterTest2.cs b/BenchMarkDotnetStudy.BenchmarkStudy/CounterTest2.cs
new file mode 100644
index 0000000..ff37711
Binary files /dev/null and b/BenchMarkDotnetStudy.BenchmarkStudy/CounterTest2.cs differ
diff --git a/BenchMarkDotnetStudy.BenchmarkStudy/CounterTest3.cs b/BenchMarkDotnetStudy.BenchmarkStudy/CounterTest3.cs
new file mode 100644
index 0000000..c9c8fb9
Binary files /dev/null and b/BenchMarkDotnetStudy.BenchmarkStudy/CounterTest3.cs differ
diff --git a/BenchMarkDotnetStudy.BenchmarkStudy/Program.cs b/BenchMarkDotnetStudy.BenchmarkStudy/Program.cs
new file mode 100644
index 0000000..5c63bf6
--- /dev/null
+++ b/BenchMarkDotnetStudy.BenchmarkStudy/Program.cs
@@ -0,0 +1,18 @@
+using BenchmarkDotNet.Running;
+
+namespace BenchMarkDotnetStudy.BenchmarkStudy
+{
+    internal class Program
+    {
+        static void Main(string[] args)
+        {
+            Console.WriteLine("Benchmark 测试!");
+
+            var summary = BenchmarkRunner.Run<CounterTest3>();
+
+            Console.WriteLine("Benchmark 测试结束:");
+
+            Console.WriteLine($"总耗时:{summary.AllRuntimes}");
+        }
+    }
+}
\ No newline at end of file
diff --git a/BenchMarkDotnetStudy.CApp/BenchMarkDotnetStudy.CApp.csproj b/BenchMarkDotnetStudy.CApp/BenchMarkDotnetStudy.CApp.csproj
new file mode 100644
index 0000000..0dc0fc7
--- /dev/null
+++ b/BenchMarkDotnetStudy.CApp/BenchMarkDotnetStudy.CApp.csproj
@@ -0,0 +1,18 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>net7.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\BenchMarkDotnetStudy.Core\BenchMarkDotnetStudy.Core.csproj" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Folder Include="Properties\" />
+  </ItemGroup>
+
+</Project>
diff --git a/BenchMarkDotnetStudy.CApp/Program.cs b/BenchMarkDotnetStudy.CApp/Program.cs
new file mode 100644
index 0000000..93ef4c4
--- /dev/null
+++ b/BenchMarkDotnetStudy.CApp/Program.cs
@@ -0,0 +1,10 @@
+namespace BenchMarkDotnetStudy.CApp
+{
+    internal class Program
+    {
+        static void Main(string[] args)
+        {
+            Console.WriteLine("Hello, World!");
+        }
+    }
+}
\ No newline at end of file
diff --git a/BenchMarkDotnetStudy.Core/BenchMarkDotnetStudy.Core.csproj b/BenchMarkDotnetStudy.Core/BenchMarkDotnetStudy.Core.csproj
new file mode 100644
index 0000000..8ef8970
--- /dev/null
+++ b/BenchMarkDotnetStudy.Core/BenchMarkDotnetStudy.Core.csproj
@@ -0,0 +1,8 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netstandard2.1</TargetFramework>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+</Project>
diff --git a/BenchMarkDotnetStudy.Core/Counter.cs b/BenchMarkDotnetStudy.Core/Counter.cs
new file mode 100644
index 0000000..40d4d90
--- /dev/null
+++ b/BenchMarkDotnetStudy.Core/Counter.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Threading;
+
+namespace BenchMarkDotnetStudy.Core
+{
+    /// <summary>
+    /// 计数器
+    /// </summary>
+    public class Counter
+    {
+        /// <summary>
+        /// 总次数
+        /// </summary>
+        public static int TotalCounter = 0;
+
+        /// <summary>
+        /// 每方法执行次数
+        /// </summary>
+        public static readonly int LoopNumber = 1000;
+
+        /// <summary>
+        /// 累加方法
+        /// </summary>
+        public int Increment()
+        {
+            for (int i = 1; i <= LoopNumber; i++)
+            {
+                ++TotalCounter;
+            }
+
+            return TotalCounter;
+        }
+
+        /// <summary>
+        /// 累加方法
+        /// </summary>
+        public int IncrementWithInterlocked()
+        {
+            for (int i = 1; i <= LoopNumber; i++)
+            {
+                Interlocked.Increment(ref TotalCounter);
+            }
+
+            return TotalCounter;
+        }
+    }
+}
diff --git a/BenchMarkDotnetStudy.sln b/BenchMarkDotnetStudy.sln
new file mode 100644
index 0000000..2c9bb37
--- /dev/null
+++ b/BenchMarkDotnetStudy.sln
@@ -0,0 +1,37 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.5.33516.290
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BenchMarkDotnetStudy.Core", "BenchMarkDotnetStudy.Core\BenchMarkDotnetStudy.Core.csproj", "{8C37BE95-8908-4038-BF56-F0F1A5F4C52C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BenchMarkDotnetStudy.CApp", "BenchMarkDotnetStudy.CApp\BenchMarkDotnetStudy.CApp.csproj", "{D5D6E7DF-82AF-4F78-BB60-A0BE378B97E4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BenchMarkDotnetStudy.BenchmarkStudy", "BenchMarkDotnetStudy.BenchmarkStudy\BenchMarkDotnetStudy.BenchmarkStudy.csproj", "{AFA892FB-C52A-443D-B0F0-3E458DDCDC7F}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{8C37BE95-8908-4038-BF56-F0F1A5F4C52C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8C37BE95-8908-4038-BF56-F0F1A5F4C52C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8C37BE95-8908-4038-BF56-F0F1A5F4C52C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8C37BE95-8908-4038-BF56-F0F1A5F4C52C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D5D6E7DF-82AF-4F78-BB60-A0BE378B97E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D5D6E7DF-82AF-4F78-BB60-A0BE378B97E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D5D6E7DF-82AF-4F78-BB60-A0BE378B97E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D5D6E7DF-82AF-4F78-BB60-A0BE378B97E4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{AFA892FB-C52A-443D-B0F0-3E458DDCDC7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AFA892FB-C52A-443D-B0F0-3E458DDCDC7F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AFA892FB-C52A-443D-B0F0-3E458DDCDC7F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{AFA892FB-C52A-443D-B0F0-3E458DDCDC7F}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {0AF1E897-2AFD-4DEC-8D48-D24CDF486479}
+	EndGlobalSection
+EndGlobal