Skip to content

Commit dcd054e

Browse files
authored
Optimizations (#25)
* Tasks have own path to not allocate FSharpFuncs also adds direct cancellationtoken getting * more optimizations * refactor benchmarks * getCancellationTokenOptimizations * Benchmark results
1 parent 1a268f7 commit dcd054e

27 files changed

+2641
-1741
lines changed
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

3-
<PropertyGroup>
4-
<TargetFramework>net7.0</TargetFramework>
5-
<ImplicitUsings>enable</ImplicitUsings>
6-
<Nullable>enable</Nullable>
7-
<IsPackable>false</IsPackable>
8-
</PropertyGroup>
3+
<PropertyGroup>
4+
<TargetFrameworks>net6.0;net7.0</TargetFrameworks>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
<IsPackable>false</IsPackable>
8+
</PropertyGroup>
99

10-
<Import Project="..\..\.paket\Paket.Restore.targets" />
11-
</Project>
10+
<Import Project="..\..\.paket\Paket.Restore.targets" />
11+
</Project>

benchmarks/CSharpTaskBenchmarks/Class1.cs

Lines changed: 87 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88

99
public static class TaskPerfCSharp
1010
{
11-
public const int BufferSize = 128;
11+
// public const int BufferSize = 128;
1212
//public const int ManyIterations = 10000;
1313

14-
public static async Task ManyWriteFileAsync(int ManyIterations)
14+
public static async Task ManyWriteFileAsync(int ManyIterations, int BufferSize)
1515
{
1616
const string path = "tmp";
1717
var junk = new byte[BufferSize];
@@ -25,6 +25,22 @@ public static async Task ManyWriteFileAsync(int ManyIterations)
2525
File.Delete(path);
2626
}
2727

28+
29+
public static async ValueTask ManyWriteFileAsync_ValueTask(int ManyIterations, int BufferSize)
30+
{
31+
const string path = "tmp";
32+
var junk = new byte[BufferSize];
33+
using (var file = File.Create(path))
34+
{
35+
for (var i = 1; i <= ManyIterations; i++)
36+
{
37+
await file.WriteAsync(junk, 0, junk.Length);
38+
}
39+
}
40+
File.Delete(path);
41+
}
42+
43+
2844
public static System.Runtime.CompilerServices.YieldAwaitable AsyncTask()
2945
{
3046
return Task.Yield();
@@ -35,7 +51,42 @@ public static Task<int> SyncTask()
3551
return Task.FromResult(100);
3652
}
3753

38-
public static async Task<int> TenBindsSync_CSharp()
54+
public static ValueTask<int> SyncValueTask()
55+
{
56+
return new ValueTask<int>(100);
57+
}
58+
59+
public static async Task<int> CSharp_TenBindsSync_TaskBuilder_BindTask()
60+
{
61+
var x1 = await SyncTask();
62+
var x2 = await SyncTask();
63+
var x3 = await SyncTask();
64+
var x4 = await SyncTask();
65+
var x5 = await SyncTask();
66+
var x6 = await SyncTask();
67+
var x7 = await SyncTask();
68+
var x8 = await SyncTask();
69+
var x9 = await SyncTask();
70+
var x10 = await SyncTask();
71+
return x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10;
72+
}
73+
74+
public static async Task<int> CSharp_TenBindsSync_TaskBuilder_BindValueTask()
75+
{
76+
var x1 = await SyncValueTask();
77+
var x2 = await SyncValueTask();
78+
var x3 = await SyncValueTask();
79+
var x4 = await SyncValueTask();
80+
var x5 = await SyncValueTask();
81+
var x6 = await SyncValueTask();
82+
var x7 = await SyncValueTask();
83+
var x8 = await SyncValueTask();
84+
var x9 = await SyncValueTask();
85+
var x10 = await SyncValueTask();
86+
return x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10;
87+
}
88+
89+
public static async ValueTask<int> CSharp_TenBindsSync_ValueTaskBuilder_BindTask()
3990
{
4091
var x1 = await SyncTask();
4192
var x2 = await SyncTask();
@@ -50,7 +101,39 @@ public static async Task<int> TenBindsSync_CSharp()
50101
return x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10;
51102
}
52103

53-
public static async Task<int> TenBindsAsync_CSharp()
104+
105+
public static async ValueTask<int> CSharp_TenBindsSync_ValueTaskBuilder_BindValueTask()
106+
{
107+
var x1 = await SyncValueTask();
108+
var x2 = await SyncValueTask();
109+
var x3 = await SyncValueTask();
110+
var x4 = await SyncValueTask();
111+
var x5 = await SyncValueTask();
112+
var x6 = await SyncValueTask();
113+
var x7 = await SyncValueTask();
114+
var x8 = await SyncValueTask();
115+
var x9 = await SyncValueTask();
116+
var x10 = await SyncValueTask();
117+
return x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10;
118+
}
119+
120+
public static async Task<int> CSharp_TenBindsAsync_TaskBuilder()
121+
{
122+
await AsyncTask();
123+
await AsyncTask();
124+
await AsyncTask();
125+
await AsyncTask();
126+
await AsyncTask();
127+
await AsyncTask();
128+
await AsyncTask();
129+
await AsyncTask();
130+
await AsyncTask();
131+
await AsyncTask();
132+
return 100;
133+
}
134+
135+
136+
public static async ValueTask<int> CSharp_TenBindsAsync_ValueTaskBuilder()
54137
{
55138
await AsyncTask();
56139
await AsyncTask();

0 commit comments

Comments
 (0)