Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
guitarrapc committed Apr 19, 2021
2 parents 55dd1e3 + 48a6d75 commit 11760ec
Show file tree
Hide file tree
Showing 12 changed files with 650 additions and 37 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ async void Example(int x, int y, int z)
// create Utf8 StringBuilder that build Utf8 directly to avoid encoding
using var sb2 = ZString.CreateUtf8StringBuilder();

sb2.Concat("foo:", x, ", bar:", y);
sb2.AppendFormat("foo:{0} bar:{1}", x, y);

// directly write to steam or dest to avoid allocation
await sb2.WriteToAsync(stream);
Expand Down
122 changes: 122 additions & 0 deletions sandbox/PerfBenchmark/Benchmarks/AppendPerformance.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
using BenchmarkDotNet.Attributes;
using Cysharp.Text;
using System;
using System.Collections.Generic;
using System.Text;

namespace PerfBenchmark.Benchmarks
{
[Config(typeof(BenchmarkConfig))]
public class AppendPerformance
{
List<string> strings;
const int COUNT = 1000;

public AppendPerformance()
{
strings = new List<string>();
for (int i = 0; i < 100; i++)
{
strings.Add("123456789");
}
}

[Benchmark]
public void ZStringUtf16()
{
for (int i = 0; i < COUNT; i++)
{
using (var sb = ZString.CreateStringBuilder())
{
for (int j = 0; j < strings.Count; j++)
{
sb.Append(strings[j]);
}

_ = sb.ToString();
}
}
}

//[Benchmark]
//public void ZStringUtf16SpanBased()
//{
// for (int i = 0; i < COUNT; i++)
// {
// using (var sb = ZString.CreateStringBuilder())
// {
// for (int j = 0; j < strings.Count; j++)
// {
// sb.AppendSlow(strings[j]);
// }

// _ = sb.ToString();
// }
// }
//}

[Benchmark(Baseline = true)]
public void StringBuilder()
{
for (int i = 0; i < COUNT; i++)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int j = 0; j < strings.Count; j++)
{
sb.Append(strings[j]);
}

_ = sb.ToString();
}
}
}


[Config(typeof(BenchmarkConfig))]
public class Utf8AppendPerformance
{
List<string> strings;
const int COUNT = 1000;

public Utf8AppendPerformance()
{
strings = new List<string>();
for (int i = 0; i < 100; i++)
{
strings.Add("123456789");
}
}

[Benchmark]
public void ZStringUtf8()
{
for (int i = 0; i < COUNT; i++)
{
using (var sb = ZString.CreateUtf8StringBuilder())
{
for (int j = 0; j < strings.Count; j++)
{
sb.Append(strings[j]);
}

_ = sb.AsSpan().ToArray();
}
}
}

[Benchmark(Baseline = true)]
public void StringBuilder()
{
for (int i = 0; i < COUNT; i++)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int j = 0; j < strings.Count; j++)
{
sb.Append(strings[j]);
}

_ = sb.ToString();
}
}
}
}
2 changes: 2 additions & 0 deletions sandbox/PerfBenchmark/Benchmarks/StringBuilderAppendJoin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@ public StringBuilderAppendJoin()
fValues = new[] { 0f, float.MaxValue, float.MinValue };
mValues = new[] { 0m, decimal.MaxValue, decimal.MinValue };

#if NETCOREAPP || NETSTANDARD2_1
if (StringBuilder() != ZStringBuilder())
throw new Exception();
#endif
}


Expand Down
25 changes: 13 additions & 12 deletions sandbox/PerfBenchmark/PerfBenchmark.csproj
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>net5.0</TargetFrameworks>
<LangVersion>8.0</LangVersion>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.12.1" />
<PackageReference Include="StringFormatter" Version="1.0.0.13" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.12.1" />
<PackageReference Include="StringFormatter" Version="1.0.0.13" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\src\ZString\ZString.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\ZString\ZString.csproj" />
</ItemGroup>

</Project>
6 changes: 5 additions & 1 deletion sandbox/PerfBenchmark/Program.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Diagnosers;
using BenchmarkDotNet.Environments;
using BenchmarkDotNet.Exporters;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Running;
Expand All @@ -17,7 +18,10 @@ internal class BenchmarkConfig : ManualConfig
public BenchmarkConfig()
{
AddDiagnoser(MemoryDiagnoser.Default);
AddJob(Job.ShortRun.WithWarmupCount(1).WithIterationCount(1));
AddJob(Job.ShortRun.WithWarmupCount(1).WithIterationCount(1).WithRuntime(CoreRuntime.Core50));

// Add Targetframeworks net47 to csproj(removed for CI)
//AddJob(Job.ShortRun.WithWarmupCount(1).WithIterationCount(1).WithRuntime(ClrRuntime.Net47));
}
}

Expand Down
Loading

0 comments on commit 11760ec

Please sign in to comment.