thread method look lock .net clr unmanaged unsafe fixed

.net - method - ¿Cuáles son las implicaciones de usar código inseguro?



look en c# (3)

Aparte del hecho de que el código en sí puede acceder a la memoria directamente. ¿Cuáles son las otras implicaciones de usar la marca del compilador "/ unsafe" y la palabra clave "fix"? ¿Hay algún impacto en los efectos relacionados con la firma de código y la implementación de mi archivo .exe (mi aplicación es solo de escritorio)?

(No se trata de si debo hacer esto o no, el por qué está cubierto en mi pregunta here )


El código inseguro no es verificable, por lo que debe tenerlo en cuenta. En un entorno de plena confianza, eso no es un gran problema, pero si tiene otros entornos que tienen un conjunto de permisos más restringido, esto podría tener un impacto allí.


Para agregar a la referencia de Jared a la fijación de objetos ...

Cuando usa punteros para acceder a la memoria directamente en C #, es vulnerable a que CLR mueva un objeto en la memoria en tiempo de ejecución. Esto significa que su puntero puede apuntar repentinamente a la sección incorrecta de la memoria. La palabra clave Fixed fijará el objeto en la memoria para evitar este problema.


Puedes poner las implicaciones en dos cubos.

La primera es cómo afecta su entorno de aplicación. El uso de código inseguro requiere que su ensamblaje se ejecute en un entorno de plena confianza. No es posible ejecutar en un entorno restringido como ciertas configuraciones de seguridad de Click Once. La razón es que el código inseguro evita que el CLR garantice la seguridad del tipo. Haga clic en Una vez, sin restricciones de seguridad, no debería tener un problema.

El segundo es lo que significa para la forma en que codificas. El uso de código inseguro generalmente implica el uso de punteros y, en particular, su uso para realizar un cálculo avanzado a través de PInvoke. Sin embargo, no hay nada inherentemente incorrecto en ninguna de estas acciones. Solo requiere una comprensión significativamente mayor de CLR y ordenamiento que el código "seguro". La fijación de objetos es un gran ejemplo de conocimiento que necesitaría tener un buen conocimiento antes de comenzar a usar estas funciones.