with uso only may compiling code appear c# unsafe

c# - uso - ¿Hace alguna diferencia usar inseguro dentro o fuera de un bucle?



uso de virtual en c# (2)

cambios unsafe las expresiones que el compilador aceptará y generará resultados. No impone tiempo de ejecución por encima, en sí mismo. Para cualquier expresión que no requiera unsafe , el compilador emitirá el mismo código si está dentro de un contexto unsafe o no.

Para los detalles de qué expresiones solo se pueden usar dentro de un contexto unsafe , recomendaría consultar la sección 18 de la Especificación del lenguaje C #

Nunca necesité usar inseguro en el pasado, pero ahora lo necesito para trabajar con un puntero manipulando un mapa de bits.

No pude encontrar ninguna documentación que indique lo contrario, pero me gustaría entender mejor cómo funciona inseguro y si hace alguna diferencia usarlo dentro o fuera de un bucle.

¿Es mejor hacer:

unsafe { for (int x = 0; x < maxX; x++) { for (int y = 0; y < maxY; y++) { //Unsafe pointer operations here. } } }

¿O para hacer ?:

for (int x = 0; x < maxX; x++) { for (int y = 0; y < maxY; y++) { unsafe { //Unsafe pointer operations here. } } }


unsafe palabra clave unsafe es un marcador que utiliza para decirle al compilador que sabe lo que está haciendo. Su propósito principal es similar a documentar su código: el bloque unsafe muestra partes de su código que usted designa como territorio no administrado; no hay impacto en la ejecución real del código.

Con esto en mente, tiene sentido reducir el tamaño de este territorio inseguro tanto como sea posible, lo que significa que su segundo enfoque es mejor que el primero.

Vale la pena mencionar que otras dos alternativas, es decir, marcar el método y marcar la clase con unsafe , también son inferiores al enfoque cuando el bloque inseguro se coloca alrededor de la porción más pequeña posible del código.