add: 添加项目

main
bicijinlian 1 year ago
parent 5278f1f4f9
commit 0cf03db251

@ -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>

@ -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());
}
}
}

@ -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}");
}
}
}

@ -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>

@ -0,0 +1,10 @@
namespace BenchMarkDotnetStudy.CApp
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
}

@ -0,0 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

@ -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;
}
}
}

@ -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
Loading…
Cancel
Save