The compiler does a great job of optimising for RELEASE builds, but occasionally it can be useful to ensure that optimisation is turned off for a local function (but not the entire project by unticking
Project Options > Optimize code
#pragma
#pragma optimize( "", off )
// Some code such as a function (but not the whole project)
#pragma optimize( "", on )
MethodImplOptions.NoOptimization
* projects targeting .NET 3.0 or earlier?
* projects deployed to a device such as Windows CE 6.0 using the .NET 3.5 CF?
You can decorate a specific method (or a property getter/setter) with [MethodImpl(MethodImplOptions.NoOptimization)]
and [MethodImpl(MethodImplOptions.NoInlining)]
, this will prevent the JITter from optimizing and inlining the method:
[MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
private void MethodWhichShouldNotBeOptimized()
{ }
However, there isn't a way to apply this attribute to a block of code. Also NoOptimization
attribute was added in .NET 3.5, which might be important for legacy code or Compact Framework.
One hack might be to enclose your block in a try/finally
clause, which seems to disable some IL optimizations as mentioned here, and then compare release IL and JITted disassembly for your specific case.