Skip to content

Instantly share code, notes, and snippets.

@davepcallan
Created February 16, 2025 15:59
Show Gist options
  • Save davepcallan/2e3414dba00654c8d828e73df100d8c3 to your computer and use it in GitHub Desktop.
Save davepcallan/2e3414dba00654c8d828e73df100d8c3 to your computer and use it in GitHub Desktop.
StringBuilder v different String.Join overloads
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Columns;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Reports;
using System;
using System.Collections.Generic;
using System.Text;
namespace Benchmarks
{
[MemoryDiagnoser]
[Config(typeof(Config))]
[SimpleJob(RuntimeMoniker.Net90)]
[HideColumns(Column.Job, Column.RatioSD, Column.AllocRatio)]
[ReturnValueValidator(failOnError: true)]
public class SBvSJBenchmarks
{
private class Config : ManualConfig
{
public Config()
{
SummaryStyle =
SummaryStyle.Default.WithRatioStyle(RatioStyle.Percentage);
}
}
private string
title = "Mr.", firstName = "David", middleName = "Patrick", lastName = "Callan";
[Benchmark(Baseline = true)]
public string StringBuilder()
{
var stringBuilder =
new StringBuilder();
return stringBuilder
.Append(title).Append(' ')
.Append(firstName).Append(' ')
.Append(middleName).Append(' ')
.Append(lastName).ToString();
}
[Benchmark]
public string StringBuilderExact24()
{
var stringBuilder =
new StringBuilder(24);
return stringBuilder
.Append(title).Append(' ')
.Append(firstName).Append(' ')
.Append(middleName).Append(' ')
.Append(lastName).ToString();
}
[Benchmark]
public string StringJoin()
{
return string.Join(" ", title, firstName, middleName, lastName);
}
[Benchmark]
public string StringJoinArrayRange()
{
return string.Join(" ", new string[] { title, firstName, middleName, lastName }, 0, 4);
}
[Benchmark]
public string StringJoinObjectArray()
{
return string.Join(" ", new object[] { title, firstName, middleName, lastName });
}
[Benchmark]
public string StringJoinIEnumerable()
{
return string.Join(" ", new List<string> { title, firstName, middleName, lastName });
}
[Benchmark]
public string StringJoinWithArray()
{
return string.Join(" ", new string[] { title, firstName, middleName, lastName });
}
[Benchmark]
public string StringJoinWithSpan()
{
ReadOnlySpan<string> span = new string[] { title, firstName, middleName, lastName };
return string.Join(" ", span.ToArray());
}
}
}
@davepcallan
Copy link
Author

Output of a single run:
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment