regiones para estandares codificacion c# .net optimization compact-framework compiler-optimization

estandares - Deshabilitar la optimización del compilador para una función específica o bloque de código(C#)



estandares de codificacion para c# (3)

En c # no hay equivalente a la directiva #pragma. Todo lo que puedes hacer es deshabilitar el alcance del método. MethodImpl está en System.Runtime.CompilerServices.

[MethodImpl(MethodImplOptions.NoOptimization)] void TargetMethod ()

El compilador hace un gran trabajo de optimización para las compilaciones de RELEASE, pero ocasionalmente puede ser útil para asegurar que la optimización esté desactivada para una función local (pero no para todo el proyecto al desmarcar las Project Options > Optimize code ).

En C ++ esto se logra usando lo siguiente (con el #pragma normalmente comentado):

#pragma optimize( "", off ) // Some code such as a function (but not the whole project) #pragma optimize( "", on )

¿Hay un equivalente en C #?

ACTUALIZAR

Varias respuestas excelentes sugieren decorar el método con MethodImplOptions.NoOptimization . Esto se implementó en .NET 3.5, aunque no en la versión Compact Framework (CF). Una pregunta de seguimiento relacionada es si un equivalente para:

* projects targeting .NET 3.0 or earlier? * projects deployed to a device such as Windows CE 6.0 using the .NET 3.5 CF?


Hay una lista de directivas de preprocesador de C # . No hay un equivalente exacto, sin embargo, es posible hacerlo usando el MethodImplAttribute y pasándole el NoOptimization la NoOptimization manera:

using System.Runtime.CompilerServices; class MyClass { [MethodImplAttribute(MethodImplOptions.NoOptimization)] public void NonOptimizeMethod() { // Do some stuff } }


Puede decorar un método específico (o un captador / definidor de propiedades) con [MethodImpl(MethodImplOptions.NoOptimization)] y [MethodImpl(MethodImplOptions.NoInlining)] , esto evitará que el JITter optimice e incorpore el método:

[MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)] private void MethodWhichShouldNotBeOptimized() { }

Sin embargo, no hay una manera de aplicar este atributo a un bloque de código. También se NoOptimization atributo NoOptimization en .NET 3.5, que podría ser importante para el código heredado o el Marco Compacto.