using BenchmarkDotNet.Attributes; using System; namespace RemoveLater { [MemoryDiagnoser] public class FormatarCpf { private string _cpf; [GlobalSetup] public void Setup() { _cpf = "12345678901"; } [Benchmark] public string FormataComSpan() { var cpfSpan = _cpf.AsSpan(); Span cpfFormatado = stackalloc char[14]; cpfFormatado[3] = '.'; cpfFormatado[7] = '.'; cpfFormatado[11] = '-'; for (var i = (src: 0, dest: 0); i.src < 11;) { if (i.src == 3 || i.src == 6 || i.src == 9) i.dest++; cpfFormatado[i.dest] = cpfSpan[i.src]; i = (i.src + 1, i.dest + 1); } return cpfFormatado.ToString(); } [Benchmark] public string FormataComSpanSlice() { var cpfSpan = _cpf.AsSpan(); Span cpfFormatado = stackalloc char[14]; cpfFormatado[3] = '.'; cpfFormatado[7] = '.'; cpfFormatado[11] = '-'; cpfSpan.Slice(0, 3).CopyTo(cpfFormatado.Slice(0, 3)); cpfSpan.Slice(3, 3).CopyTo(cpfFormatado.Slice(4, 3)); cpfSpan.Slice(6, 3).CopyTo(cpfFormatado.Slice(8, 3)); cpfSpan.Slice(9, 2).CopyTo(cpfFormatado.Slice(12, 2)); return cpfFormatado.ToString(); } [Benchmark] public string FormataComIndexRange() { return $"{_cpf[0..2]}.{_cpf[3..5]}.{_cpf[6..8]}-{_cpf[9..10]}"; } [Benchmark(Baseline = true)] public string FormataComSubString() { return $"{_cpf.Substring(0, 3)}.{_cpf.Substring(3, 3)}.{_cpf.Substring(6, 3)}-{_cpf.Substring(9, 2)}"; } } }