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.