¿Cuál es la diferencia entre el código no seguro y el código no administrado en C#?¿Cuál es la diferencia entre el código inseguro y el código no administrado en C#?
Respuesta
El código administrado se ejecuta bajo la supervisión de CLR (Common Language Runtime). Esto es responsable de cosas como administración de memoria y recolección de basura.
Así que no gestionado simplemente se ejecuta fuera del contexto de la CLR. inseguro es una especie de "intermedio" gestionado y no gestionado. inseguro todavía se ejecuta bajo el CLR, pero le permitirá acceder a la memoria directamente a través de punteros.
El código no seguro en C# permite el uso de punteros. En el contexto del CLR, no hay un código no administrado en C#.
Siempre he entendido código 'no administrado' como código que se ejecuta en el contexto de la CLR ... Básicamente, como las llamadas a C/C++ DLL y tal. –
Estoy totalmente de acuerdo. No serás P/Invocando ninguna C# DLL, solo C/C++ como mencionaste. –
inseguro - Código que pueden estar fuera del subconjunto verificable de MSIL
no administrado - El código que no está gestionada por el tiempo de ejecución y por lo tanto no es visible al GC (por ejemplo una función x 86 compilado nativo sería administrado .)
utiliza algo como pinvoke para ejecutar código no administrado en .NET – Hal
Sí, pero también puede definir funciones externas con atributos DLLImport para traer y enlazar a archivos DLL nativos; una clase de identificadores de funciones externas se puede usar como un "contenedor" administrado para el código nativo. – KeithS
código no seguro se ejecuta dentro del CLR mientras que el código administrado por la ONU se ejecuta fuera del CLR.
Un ejemplo de código no seguro sería:
unsafe class MyClass
{
private int * intPtr;
}
Puede utilizar punteros en cualquier parte de esta clase.
Un ejemplo de código no administrado es:
class MyClass
{
[DllImport("someUnmanagedDll.dll")]
static extern int UnManagedCodeMethod(string msg, string title);
public static void Main()
{
UnManagedCodeMethod("calling unmanaged code", "hi");
}
}
No es necesariamente el código no administrado en sí, sino llamándolo.
Esto es lo que puede hacer dentro de un contexto inseguro.
http://msdn.microsoft.com/en-us/library/aa664769%28v=VS.71%29.aspx
- 1. Diferencia entre el código nativo y el código administrado?
- 2. ¿Cuál es la diferencia entre C++ administrado y C#?
- 3. depurando el código de C# administrado y el código de C++ no administrado en una solución
- 4. ¿Cómo usar el código administrado del código no administrado?
- 5. Rendimiento de invocar código no administrado desde el código administrado
- 6. ¿Cuál es la diferencia entre el código de compilación y el código ejecutable?
- 7. llamando al código administrado desde el código no administrado
- 8. ¿Cuál es la diferencia entre el código nativo, el código de máquina y el código de ensamblaje?
- 9. pérdida de memoria al llamar código no administrado desde el código administrado en Windows 7
- 10. ¿Qué es inseguro en este código?
- 11. Diferencia entre C++ administrado y C++
- 12. La mejor manera de llamar al código administrado .NET desde el código no administrado
- 13. Usando DLR desde el código no administrado
- 14. Uso del código no administrado del código administrado
- 15. ¿Cuál es la diferencia entre el error del código de retorno y el error
- 16. ¿Cuál es la diferencia entre el código de ensamblaje y el bytecode?
- 17. Depuración del código no administrado mientras se depura el código administrado
- 18. ¿Debe el código administrado devolver un error o lanzar excepciones al código no administrado?
- 19. Cuál es la diferencia entre las licencias de código abierto
- 20. ¿Es MSIL igual que el código administrado en .NET?
- 21. ¿Cuál es la diferencia entre un tipo no administrado y un tipo gestionado?
- 22. ¿Cuál es la diferencia entre estos dos ejemplos de código?
- 23. La pérdida de anti-aliasing cuando se comparten entre el objeto Graphics código administrado y no administrado
- 24. ¿Diferencia entre la biblioteca y el código de la aplicación?
- 25. Análisis de métricas de código para código C++ no administrado
- 26. Diferencia entre el producto de la aplicación Android administrado y no administrado?
- 27. C++/cli pass (administrado) delegado al código no administrado
- 28. ¿Hay alguna diferencia entre nulo y 0 al asignar punteros a un código inseguro?
- 29. ¿Cuál es la diferencia entre el casting y la conversión?
- 30. Código seguro contra inseguro
@NullUserExceptin: gracias, es realmente útil para mí – ashish
¿Qué quiere decir con "contexto"? Con C++/CLI, puede mezclar código administrado y no administrado (nativo) en un ensamblado, en un proceso. – Niki
Un ensamblado de C++/CLI compilado con la opción/clr: safe (modo seguro) garantiza que el código IL producido sea verificable y que sea seguro. Básicamente, el ensamblaje seguro no puede contener ninguna funcionalidad que pertenezca al bloque inseguro C#, como la aritmética del puntero. Para usar dicha funcionalidad, debe compilarse en modo puro con/clr: pure (el ensamblado de modo puro es completamente IL, pero puede enlazarse con dlls nativos, ¿no es posible enlazar estáticamente con DLL nativas en modo puro?) O mixed-mode/clr (que no solo puede vincularse con el código nativo, sino también incorporarlo al ensamblaje producido). – Protongun