1
1
using System ;
2
2
using System . Collections . Generic ;
3
+ using System . Diagnostics ;
3
4
using System . Linq ;
4
5
using BenchmarkDotNet . Analysers ;
5
6
using BenchmarkDotNet . Attributes ;
@@ -198,7 +199,7 @@ public struct Struct128
198
199
l13 , l14 , l15 , l16 ;
199
200
}
200
201
201
- public class DifferentSizedStructs
202
+ public class DifferentSizedStructs : RealTimeBenchmarks
202
203
{
203
204
[ Benchmark ] public Struct16 Struct16 ( ) => default ;
204
205
[ Benchmark ] public Struct32 Struct32 ( ) => default ;
@@ -207,17 +208,46 @@ public class DifferentSizedStructs
207
208
}
208
209
}
209
210
210
- public class EmptyVoid { [ Benchmark ] public void Benchmark ( ) { } }
211
- public class EmptyByte { [ Benchmark ] public byte Benchmark ( ) => default ; }
212
- public class EmptySByte { [ Benchmark ] public sbyte Benchmark ( ) => default ; }
213
- public class EmptyShort { [ Benchmark ] public short Benchmark ( ) => default ; }
214
- public class EmptyUShort { [ Benchmark ] public ushort Benchmark ( ) => default ; }
215
- public class EmptyChar { [ Benchmark ] public char Benchmark ( ) => default ; }
216
- public class EmptyInt32 { [ Benchmark ] public int Benchmark ( ) => default ; }
217
- public class EmptyUInt32 { [ Benchmark ] public uint Benchmark ( ) => default ; }
218
- public class EmptyInt64 { [ Benchmark ] public long Benchmark ( ) => default ; }
219
- public class EmptyUInt64 { [ Benchmark ] public ulong Benchmark ( ) => default ; }
220
- public class EmptyIntPtr { [ Benchmark ] public IntPtr Benchmark ( ) => default ; }
221
- public class EmptyUIntPtr { [ Benchmark ] public UIntPtr Benchmark ( ) => default ; }
222
- public class EmptyVoidPointer { [ Benchmark ] public unsafe void * Benchmark ( ) => default ; }
223
- public class EmptyClass { [ Benchmark ] public object Class ( ) => default ; }
211
+ public class RealTimeBenchmarks
212
+ {
213
+ private Process process ;
214
+ private ProcessPriorityClass oldPriority ;
215
+
216
+ [ GlobalSetup ]
217
+ public void Setup ( )
218
+ {
219
+ process = Process . GetCurrentProcess ( ) ;
220
+ try
221
+ {
222
+ oldPriority = process . PriorityClass ;
223
+ // Requires admin mode. Makes the OS never give up CPU time for this process, so we can get more accurate timings.
224
+ process . PriorityClass = ProcessPriorityClass . RealTime ;
225
+ }
226
+ catch ( PlatformNotSupportedException ) { }
227
+ }
228
+
229
+ [ GlobalCleanup ]
230
+ public void Cleanup ( )
231
+ {
232
+ try
233
+ {
234
+ process . PriorityClass = oldPriority ;
235
+ }
236
+ catch ( PlatformNotSupportedException ) { }
237
+ }
238
+ }
239
+
240
+ public class EmptyVoid : RealTimeBenchmarks { [ Benchmark ] public void Benchmark ( ) { } }
241
+ public class EmptyByte : RealTimeBenchmarks { [ Benchmark ] public byte Benchmark ( ) => default ; }
242
+ public class EmptySByte : RealTimeBenchmarks { [ Benchmark ] public sbyte Benchmark ( ) => default ; }
243
+ public class EmptyShort : RealTimeBenchmarks { [ Benchmark ] public short Benchmark ( ) => default ; }
244
+ public class EmptyUShort : RealTimeBenchmarks { [ Benchmark ] public ushort Benchmark ( ) => default ; }
245
+ public class EmptyChar : RealTimeBenchmarks { [ Benchmark ] public char Benchmark ( ) => default ; }
246
+ public class EmptyInt32 : RealTimeBenchmarks { [ Benchmark ] public int Benchmark ( ) => default ; }
247
+ public class EmptyUInt32 : RealTimeBenchmarks { [ Benchmark ] public uint Benchmark ( ) => default ; }
248
+ public class EmptyInt64 : RealTimeBenchmarks { [ Benchmark ] public long Benchmark ( ) => default ; }
249
+ public class EmptyUInt64 : RealTimeBenchmarks { [ Benchmark ] public ulong Benchmark ( ) => default ; }
250
+ public class EmptyIntPtr : RealTimeBenchmarks { [ Benchmark ] public IntPtr Benchmark ( ) => default ; }
251
+ public class EmptyUIntPtr : RealTimeBenchmarks { [ Benchmark ] public UIntPtr Benchmark ( ) => default ; }
252
+ public class EmptyVoidPointer : RealTimeBenchmarks { [ Benchmark ] public unsafe void * Benchmark ( ) => default ; }
253
+ public class EmptyClass : RealTimeBenchmarks { [ Benchmark ] public object Class ( ) => default ; }
0 commit comments