Skip to content

Instantly share code, notes, and snippets.

@vanbukin
Last active May 25, 2020 22:05
Show Gist options
  • Save vanbukin/e32490596d7cd853e5e7522eabb6bba5 to your computer and use it in GitHub Desktop.
Save vanbukin/e32490596d7cd853e5e7522eabb6bba5 to your computer and use it in GitHub Desktop.
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19041.264 (2004/?/20H1)
AMD Ryzen 9 3950X, 1 CPU, 32 logical and 16 physical cores
.NET Core SDK=3.1.300
  [Host]     : .NET Core 3.1.4 (CoreCLR 4.700.20.20201, CoreFX 4.700.20.22101), X64 RyuJIT
  Job-SDTQJP : .NET Core 3.1.4 (CoreCLR 4.700.20.20201, CoreFX 4.700.20.22101), X64 RyuJIT

Server=True  
Method Mean Error StdDev Ratio Gen 0 Gen 1 Gen 2 Allocated
FastAllocateString 20.51 ns 0.049 ns 0.041 ns 1.00 0.0003 - - 88 B
StringCreate 26.77 ns 0.093 ns 0.083 ns 1.31 0.0003 - - 88 B
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19041.264 (2004/?/20H1)
AMD Ryzen 9 3950X, 1 CPU, 32 logical and 16 physical cores
.NET Core SDK=5.0.100-preview.4.20258.7
  [Host]     : .NET Core 5.0.0 (CoreCLR 5.0.20.25106, CoreFX 5.0.20.25106), X64 RyuJIT
  Job-APPKBU : .NET Core 5.0.0 (CoreCLR 5.0.20.25106, CoreFX 5.0.20.25106), X64 RyuJIT

Server=True  
Method Mean Error StdDev Ratio RatioSD Gen 0 Gen 1 Gen 2 Allocated
FastAllocateString 13.88 ns 0.082 ns 0.073 ns 1.00 0.00 0.0003 - - 88 B
StringCreate 18.92 ns 0.434 ns 0.500 ns 1.35 0.04 0.0003 - - 88 B
public unsafe partial struct Uuid
{
public string ToStringWithStringCreate(string? format, IFormatProvider? formatProvider)
{
// ... same as original ToString
var uuidString = string.Create(32, this, (span, state) =>
{
fixed (char* uuidChars = &span.GetPinnableReference())
{
FormatNThis(state, uuidChars);
}
});
return uuidString;
// ... same as original ToString
}
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
private static void FormatNThis(Uuid self, char* dest)
{
// dddddddddddddddddddddddddddddddd
var destUints = (uint*) dest;
destUints[0] = TableToHex[self._byte0];
destUints[1] = TableToHex[self._byte1];
destUints[2] = TableToHex[self._byte2];
destUints[3] = TableToHex[self._byte3];
destUints[4] = TableToHex[self._byte4];
destUints[5] = TableToHex[self._byte5];
destUints[6] = TableToHex[self._byte6];
destUints[7] = TableToHex[self._byte7];
destUints[8] = TableToHex[self._byte8];
destUints[9] = TableToHex[self._byte9];
destUints[10] = TableToHex[self._byte10];
destUints[11] = TableToHex[self._byte11];
destUints[12] = TableToHex[self._byte12];
destUints[13] = TableToHex[self._byte13];
destUints[14] = TableToHex[self._byte14];
destUints[15] = TableToHex[self._byte15];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment