-
Notifications
You must be signed in to change notification settings - Fork 105
/
Copy pathClass1.cs
80 lines (69 loc) · 3.14 KB
/
Class1.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using System.Buffers;
using System.IO.Pipelines;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Running;
namespace Pipeline
{
[MemoryDiagnoser]
// [MinColumn, MaxColumn, MeanColumn, MedianColumn]
[SimpleJob(RuntimeMoniker.Net472)]
[SimpleJob(RuntimeMoniker.NetCoreApp31)]
[SimpleJob(RuntimeMoniker.NetCoreApp21)]
public class ClassicVsPipelines
{
private const string SampleCommand =
"Content-Length: 88\r\n\r\n{\"seq\":1,\"type\":\"response\",\"request_seq\":1,\"success\":true,\"command\":\"command\",\"body\":{}}";
private const string AnotherPayload =
"Content-Length: 894\r\n\r\n{\"edit\":{\"documentChanges\":[{\"textDocument\":{\"version\":1,\"uri\":\"file:///abc/123/d.cs\"},\"edits\":[{\"range\":{\"start\":{\"line\":1,\"character\":1},\"end\":{\"line\":2,\"character\":2}},\"newText\":\"new text\"},{\"range\":{\"start\":{\"line\":3,\"character\":3},\"end\":{\"line\":4,\"character\":4}},\"newText\":\"new text2\"}]},{\"textDocument\":{\"version\":1,\"uri\":\"file:///abc/123/b.cs\"},\"edits\":[{\"range\":{\"start\":{\"line\":1,\"character\":1},\"end\":{\"line\":2,\"character\":2}},\"newText\":\"new text2\"},{\"range\":{\"start\":{\"line\":3,\"character\":3},\"end\":{\"line\":4,\"character\":4}},\"newText\":\"new text3\"}]},{\"kind\":\"create\",\"uri\":\"file:///abc/123/b.cs\",\"options\":{\"overwrite\":true,\"ignoreIfExists\":true}},{\"kind\":\"rename\",\"oldUri\":\"file:///abc/123/b.cs\",\"newUri\":\"file:///abc/123/c.cs\",\"options\":{\"overwrite\":true,\"ignoreIfExists\":true}},{\"kind\":\"delete\",\"uri\":\"file:///abc/123/c.cs\",\"options\":{\"recursive\":false,\"ignoreIfNotExists\":true}}]}}";
private ClassicHandler? _classic;
private PipelinesBased? _pipelines;
[Params(
SampleCommand,
AnotherPayload
)]
public string Payload { get; set; }
[Params(
// 10,
100,
1000
)]
public int Count { get; set; }
public byte[] Bytes { get; set; }
[GlobalSetup]
public void SetupPipelines()
{
var bytes = Encoding.ASCII.GetBytes(Payload);
Bytes = Enumerable.Range(0, Count).SelectMany(z => bytes).ToArray();
}
[Benchmark]
public Task Classic()
{
var pipe = new Pipe();
pipe.Writer.Write(Bytes);
pipe.Writer.Complete();
_classic = new ClassicHandler(pipe.Reader.AsStream());
return _classic.ProcessInputStream();
}
[Benchmark]
public Task Pipelines()
{
var pipe = new Pipe();
pipe.Writer.Write(Bytes);
pipe.Writer.Complete();
_pipelines = new PipelinesBased(pipe.Reader);
return _pipelines.ProcessInputStream(CancellationToken.None);
}
}
public class Program
{
public static void Main(string[] args)
{
var summary = BenchmarkRunner.Run<ClassicVsPipelines>();
}
}
}