@@ -185,7 +185,7 @@ private unsafe ClockSpan MeasureWithRandomStack(Action<long> action, long invoke
185185            return  clockSpan ; 
186186        } 
187187
188-         [ MethodImpl ( MethodImplOptions . NoInlining ) ] 
188+         [ MethodImpl ( MethodImplOptions . NoInlining   |   CodeGenHelper . AggressiveOptimizationOption ) ] 
189189        private  unsafe  void  Consume ( byte *  _ )  {  } 
190190
191191        [ MethodImpl ( MethodImplOptions . NoInlining  |  CodeGenHelper . AggressiveOptimizationOption ) ] 
@@ -196,6 +196,7 @@ private ClockSpan Measure(Action<long> action, long invokeCount)
196196            return  clock . GetElapsed ( ) ; 
197197        } 
198198
199+         [ MethodImpl ( CodeGenHelper . AggressiveOptimizationOption ) ] 
199200        private  ( GcStats ,  ThreadingStats ,  double )  GetExtraStats ( IterationData  data ) 
200201        { 
201202            // Warm up the measurement functions before starting the actual measurement. 
@@ -208,18 +209,13 @@ private ClockSpan Measure(Action<long> action, long invokeCount)
208209            var  exceptionsStats  =  new  ExceptionsStats ( ) ;  // allocates 
209210            exceptionsStats . StartListening ( ) ;  // this method might allocate 
210211
211- #if ! NET7_0_OR_GREATER 
212-             if  ( JitInfo . IsTiered  &&  CoreRuntime . TryGetVersion ( out  var  version )  &&  version . Major  is  >=  3  and <=  6 ) 
212+             if  ( JitInfo . IsTiered ) 
213213            { 
214214                // #1542 
215215                // We put the current thread to sleep so tiered jit can kick in, compile its stuff, 
216216                // and NOT allocate anything on the background thread when we are measuring allocations. 
217-                 // This is only an issue on netcoreapp3.0 to net6.0. Tiered jit allocations were "fixed" in net7.0 
218-                 // (maybe not completely eliminated forever, but at least reduced to a point where measurements are much more stable), 
219-                 // and netcoreapp2.X uses only GetAllocatedBytesForCurrentThread which doesn't capture the tiered jit allocations. 
220-                 Thread . Sleep ( TimeSpan . FromMilliseconds ( 500 ) ) ; 
217+                 Thread . Sleep ( JitInfo . BackgroundCompilationDelay ) ; 
221218            } 
222- #endif
223219
224220            // GC collect before measuring allocations. 
225221            ForceGcCollect ( ) ; 
@@ -250,6 +246,7 @@ private GcStats MeasureWithGc(Action<long> action, long invokeCount)
250246            return  finalGcStats  -  initialGcStats ; 
251247        } 
252248
249+         [ MethodImpl ( CodeGenHelper . AggressiveOptimizationOption ) ] 
253250        private  void  RandomizeManagedHeapMemory ( ) 
254251        { 
255252            // invoke global cleanup before global setup 
@@ -268,6 +265,7 @@ private void RandomizeManagedHeapMemory()
268265            // we don't enforce GC.Collects here as engine does it later anyway 
269266        } 
270267
268+         [ MethodImpl ( CodeGenHelper . AggressiveOptimizationOption ) ] 
271269        private  void  GcCollect ( ) 
272270        { 
273271            if  ( ! ForceGcCleanups ) 
@@ -276,6 +274,7 @@ private void GcCollect()
276274            ForceGcCollect ( ) ; 
277275        } 
278276
277+         [ MethodImpl ( CodeGenHelper . AggressiveOptimizationOption ) ] 
279278        internal  static void  ForceGcCollect ( ) 
280279        { 
281280            GC . Collect ( ) ; 
@@ -327,6 +326,7 @@ private sealed class Impl
327326                private  readonly  object  hangLock  =  new ( ) ; 
328327                private  readonly  ManualResetEventSlim  enteredFinalizerEvent  =  new ( false ) ; 
329328
329+                 [ MethodImpl ( CodeGenHelper . AggressiveOptimizationOption ) ] 
330330                ~ Impl ( ) 
331331                { 
332332                    lock  ( hangLock ) 
@@ -336,14 +336,15 @@ private sealed class Impl
336336                    } 
337337                } 
338338
339-                 [ MethodImpl ( MethodImplOptions . NoInlining ) ] 
339+                 [ MethodImpl ( MethodImplOptions . NoInlining   |   CodeGenHelper . AggressiveOptimizationOption ) ] 
340340                internal  static ( object  hangLock ,  ManualResetEventSlim  enteredFinalizerEvent )  CreateWeakly ( ) 
341341                { 
342342                    var  impl  =  new  Impl ( ) ; 
343343                    return  ( impl . hangLock ,  impl . enteredFinalizerEvent ) ; 
344344                } 
345345            } 
346346
347+             [ MethodImpl ( CodeGenHelper . AggressiveOptimizationOption ) ] 
347348            internal  static FinalizerBlocker  MaybeStart ( ) 
348349            { 
349350                if  ( Environment . GetEnvironmentVariable ( UnitTestBlockFinalizerEnvKey )  !=  UnitTestBlockFinalizerEnvValue ) 
@@ -360,6 +361,7 @@ internal static FinalizerBlocker MaybeStart()
360361                return  new  FinalizerBlocker ( hangLock ) ; 
361362            } 
362363
364+             [ MethodImpl ( CodeGenHelper . AggressiveOptimizationOption ) ] 
363365            public  void  Dispose ( ) 
364366            { 
365367                if  ( hangLock  is  not null ) 
0 commit comments