Skip to content

Commit

Permalink
[up] SampleApp.Api to .NET 8
Browse files Browse the repository at this point in the history
[add] Expando object benchmarking
  • Loading branch information
i4004 committed Jan 24, 2024
1 parent 74b60b1 commit d432088
Show file tree
Hide file tree
Showing 7 changed files with 129 additions and 4 deletions.
15 changes: 12 additions & 3 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@
"type": "coreclr",
"request": "launch",
"preLaunchTask": "Build Api Example",
"program": "${workspaceFolder}/src/SampleApps/SampleApp.Api/bin/Debug/net7.0/SampleApp.Api.dll",
"cwd": "${workspaceFolder}/src/SampleApps/SampleApp.Api/bin/Debug/net7.0/",
"program": "${workspaceFolder}/src/SampleApps/SampleApp.Api/bin/Debug/net8.0/SampleApp.Api.dll",
"cwd": "${workspaceFolder}/src/SampleApps/SampleApp.Api/bin/Debug/net8.0/",
"internalConsoleOptions": "openOnSessionStart",
"serverReadyAction": {
"action": "openExternally",
Expand All @@ -51,6 +51,15 @@
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
},
{
"name": "Simplify.Web.Benchmark",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "Build",
"program": "${workspaceFolder}/src/Simplify.Web.Benchmark/bin/Debug/net8.0/Simplify.Web.Benchmark.dll",
"cwd": "${workspaceFolder}/src/Simplify.Web.Benchmark/bin/Debug/net8.0/",
"internalConsoleOptions": "openOnSessionStart"
},
]
}
2 changes: 2 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
"cacheable",
"Catched",
"cref",
"Diagnoser",
"Expando",
"HOSTINGSTARTUPASSEMBLIES",
"localizable",
"mscorlib",
Expand Down
2 changes: 1 addition & 1 deletion src/SampleApps/SampleApp.Api/SampleApp.Api.csproj
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
Expand Down
85 changes: 85 additions & 0 deletions src/Simplify.Web.Benchmark/ExpandoObjectAndDictionaryBenchmarks.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Dynamic;
using BenchmarkDotNet.Attributes;

namespace Simplify.Web.Benchmark;

[MemoryDiagnoser]
public class ExpandoObjectAndDictionaryBenchmarks
{
private const int NumValues = 1;

[Benchmark]
public void ExpandoObjectTest()
{
var expandoObject = CreateAndFillExpando();

dynamic expandoDynamicField = expandoObject;

for (int i = 0; i < NumValues; i++)
{
string value = expandoDynamicField.Key0;
Trace.WriteLine(value);
}

var expandoDictionaryField = expandoObject;

for (int i = 0; i < NumValues; i++)
{
string value = expandoDictionaryField[$"Key{i}"].ToString();
Trace.WriteLine(value);
}
}

[Benchmark]
public void DictionaryTest()
{
var dictionary = CreateAndFillDictionary();

dynamic dictionaryDynamicField = ToExpando(dictionary);

for (int i = 0; i < NumValues; i++)
{
string value = dictionaryDynamicField.Key0;
Trace.WriteLine(value);
}

for (int i = 0; i < NumValues; i++)
{
string value = dictionary[$"Key{i}"].ToString();
Trace.WriteLine(value);
}
}

private static IDictionary<string, object> CreateAndFillExpando()
{
var expandoDict = (IDictionary<string, object>)new ExpandoObject();

for (int i = 0; i < NumValues; i++)
expandoDict[$"Key{i}"] = $"Value{i}";

return expandoDict;
}

private static Dictionary<string, object> CreateAndFillDictionary()
{
var dictionary = new Dictionary<string, object>();

for (int i = 0; i < NumValues; i++)
dictionary[$"Key{i}"] = $"Value{i}";

return dictionary;
}

private static ExpandoObject ToExpando(Dictionary<string, object> dictionary)
{
var expando = new ExpandoObject();
var expandoDict = (IDictionary<string, object>)expando;

foreach (var kvp in dictionary)
expandoDict[kvp.Key] = kvp.Value;

return expando;
}
}
4 changes: 4 additions & 0 deletions src/Simplify.Web.Benchmark/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
using BenchmarkDotNet.Running;
using Simplify.Web.Benchmark;

BenchmarkRunner.Run<ExpandoObjectAndDictionaryBenchmarks>();
19 changes: 19 additions & 0 deletions src/Simplify.Web.Benchmark/Simplify.Web.Benchmark.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Optimize>true</Optimize>
<OutputType>Exe</OutputType>

<Authors>Alexander Krylkov</Authors>
<Product>Simplify</Product>
<Description>Simplify.Web benchmarker</Description>
<Copyright>Licensed under LGPL</Copyright>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Simplify.Web\Simplify.Web.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.13.*" />
</ItemGroup>
</Project>
6 changes: 6 additions & 0 deletions src/Simplify.Web.sln
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simplify.Web.RegistrationsT
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleApp.Api", "SampleApps\SampleApp.Api\SampleApp.Api.csproj", "{687D6102-0EC2-458C-9D86-CFE5DFA2D63A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simplify.Web.Benchmark", "Simplify.Web.Benchmark\Simplify.Web.Benchmark.csproj", "{A8E0528A-FBC5-450B-897E-B35AD2B6A42A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -59,6 +61,10 @@ Global
{687D6102-0EC2-458C-9D86-CFE5DFA2D63A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{687D6102-0EC2-458C-9D86-CFE5DFA2D63A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{687D6102-0EC2-458C-9D86-CFE5DFA2D63A}.Release|Any CPU.Build.0 = Release|Any CPU
{A8E0528A-FBC5-450B-897E-B35AD2B6A42A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A8E0528A-FBC5-450B-897E-B35AD2B6A42A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A8E0528A-FBC5-450B-897E-B35AD2B6A42A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A8E0528A-FBC5-450B-897E-B35AD2B6A42A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down

0 comments on commit d432088

Please sign in to comment.