Estoy usando un comando específico en mi código C #, que funciona bien. Sin embargo, se dice que se comportan mal en el código "no administrado".
¿Qué es el código administrado o no administrado?
Estoy usando un comando específico en mi código C #, que funciona bien. Sin embargo, se dice que se comportan mal en el código "no administrado".
¿Qué es el código administrado o no administrado?
Respuestas:
Aquí hay un texto de MSDN sobre el código no administrado .
Algún código de biblioteca necesita llamar a código no administrado (por ejemplo, API de código nativo, como Win32). Debido a que esto significa salir del perímetro de seguridad para el código administrado, se requiere precaución.
Aquí hay otra explicación complementaria sobre el código administrado:
Para su problema:
Creo que es porque NUnit ejecuta su código para UnitTesting y podría tener una parte de él que no está administrada. Pero no estoy seguro de eso, así que no tome esto por oro. Estoy seguro de que alguien podrá darle más información al respecto. ¡Espero eso ayude!
Este es un buen artículo sobre el tema.
Para resumir,
Un programa de aplicación que se ejecuta dentro de un motor de tiempo de ejecución instalado en la misma máquina. La aplicación no puede ejecutarse sin ella. El entorno de tiempo de ejecución proporciona la biblioteca general de rutinas de software que utiliza el programa y normalmente realiza la gestión de la memoria. También puede proporcionar la conversión justo a tiempo (JIT) de código fuente a código ejecutable o de un lenguaje intermedio a código ejecutable. Java, Visual Basic y Common Language Runtime (CLR) de .NET son ejemplos de motores de tiempo de ejecución. ( Leer más )
Un programa ejecutable que se ejecuta solo. Lanzado desde el sistema operativo, el programa recurre y utiliza las rutinas de software en el sistema operativo, pero no requiere que se use otro sistema de software. Los programas en lenguaje ensamblador que se han ensamblado en lenguaje máquina y los programas C / C ++ compilados en lenguaje máquina para una plataforma en particular son ejemplos de código no administrado. ( Leer más )
Cuando piensas en no administrado , piense en códigos específicos de máquina y de nivel de máquina. Como el lenguaje ensamblador x86. El código no administrado (nativo) se compila y se vincula para ejecutarse directamente en el procesador para el que fue diseñado, excluyendo todo el sistema operativo por el momento. No es portátil, pero es rápido. Código muy simple, despojado.
Gestionado código es todo, desde Java hasta el antiguo BASIC interpretativo, o cualquier cosa que se ejecute bajo .NET. El código administrado generalmente se compila en un conjunto de instrucciones de código P o de bytes de nivel intermedio. Estas no son instrucciones específicas de la máquina, aunque se parecen al lenguaje ensamblador. El código administrado aísla el programa de la máquina en la que se está ejecutando y crea un límite seguro en el que toda la memoria se asigna indirectamente y, en general, no tiene acceso directo a los recursos de la máquina como puertos, espacio de direcciones de memoria, la pila, etc. La idea es correr en un entorno más seguro.
Para convertir de una variable administrada, por ejemplo, a una no administrada, debe llegar al objeto real. Probablemente esté envuelto o en caja en algún embalaje adicional. Las variables no administradas (como un 'int', por ejemplo), en una máquina de 32 bits, ocupa exactamente 4 bytes. No hay gastos generales o embalaje adicional. El proceso de pasar de código administrado a no administrado, y viceversa, se llama " cálculo de referencias ". Permite que sus programas crucen el límite.
En la menor cantidad de palabras posible:
El código administrado es lo que crean los compiladores de C # .Net, VB.Net, F # .Net, etc. Se ejecuta en el CLR, que, entre otras cosas, ofrece servicios como recolección de basura, verificación de referencias y mucho más. Así que piense en ello, mi código es administrado por el CLR.
Por otro lado, el código no administrado compila directamente al código de la máquina. No se gestiona por CLR.
Código administrado:
Código que se ejecuta bajo un "contrato de cooperación" con Common Language Runtime. El código administrado debe proporcionar los metadatos necesarios para que el tiempo de ejecución brinde servicios tales como administración de memoria, integración entre idiomas, seguridad de acceso al código y control automático de por vida de los objetos. Todo el código basado en el lenguaje intermedio de Microsoft (MSIL) se ejecuta como código administrado.Código no administrado:
Código que se crea sin tener en cuenta las convenciones y requisitos del Common Language Runtime. El código no administrado se ejecuta en el entorno de Common Language Runtime con servicios mínimos (por ejemplo, sin recolección de basura, depuración limitada, etc.).
Referencia: http://www.dotnetspider.com/forum/11612-difference-between-managed-and-unmanaged-code.aspx
El código administrado se ejecuta dentro del entorno de CLR, es decir .NET runtime. En resumen, todos los IL son código administrado. Pero si está utilizando algún componente de software de terceros VB6 o VC ++, estos son código no administrado ya que .NET runtime (CLR) no tiene control sobre la ejecución del código fuente del lenguaje.
Código administrado: código que forma MSIL (lenguaje intermedio) se desarrolla después de la compilación del compilador del lenguaje y se ejecuta directamente por el CLR
código administrado llamado. por ejemplo: - Todos los 61 códigos de idioma compatibles con .net framework
Código no administrado: código que se desarrolló antes .net
para el cual el formulario MSIL no está disponible y se ejecuta CLR
directamente, sino que CLR
lo redireccionará al sistema operativo, esto se conoce como código no administrado.
por ejemplo: -COM, API Win32
En primer lugar, comprenda que esto, antes .NET framework
, Microsoft
proporcionaba productos independientes como MFC (Visual C++), VB, FoxPro
etc.
En 2002, Microsoft combinó sus productos e hizo .NET Framework. Ahora hay una diferencia entre cómo se ejecutó el código anteriormente y cómo se administra y ejecuta el código en .NET Framework. Microsoft introdujo el concepto de CLR
.NET Framework que compila el código proveniente de cualquier lanugague compatible de .NET framework y proporciona funcionalidades adicionales como memory mangement, garbage collection
etc. Pero, tales características CLR no estaban disponibles directamente antes.
Entonces, si está creando una biblioteca / código en .NET framework (compilado con CLR), eso se llama
Managed code
. Puede usar esta biblioteca aún más en otras aplicaciones / proyectos .NET, y allí también, CLR comprenderá cómo se compiló antes, y es por eso que sigue siendo su código de administración.
OTOH si desea usar las bibliotecas que se escribieron antes de .NET framework, puede hacerlo con ciertas limitaciones, pero recuerde, ya que CLR no estaba allí en ese momento, por lo que ahora CLR no comprenderá y compilará este código nuevamente . Y esto se llamará unmanaged code
. Tenga en cuenta que las bibliotecas / conjuntos creados por terceros para proporcionar ciertas funciones / herramientas también pueden considerarse como código no administrado si no es compatible con CLR.
En términos simples, Administrar código es algo que su CLR entiende y puede compilar por sí solo para su posterior ejecución. En .NET framework, (desde cualquier lenguaje que funcione en .NET framework) Cuando el código va a CLR, el código proporciona cierta información de metadatos, de modo que CLR puede proporcionarle las funciones especificadas aquí . Pocos de ellos son Garbage collection, Performance improvements, cross-language integration, memory management
etc.
OTOH, el código no administrado es algo específico de la máquina y está listo para usar, no es necesario procesarlo más.
Desde Pro C # 5 y .NET 4.5 Framework:
Código administrado frente a código no administrado: Quizás el punto más importante para comprender sobre el lenguaje C # es que puede producir código que se ejecute solo dentro del tiempo de ejecución de .NET (nunca podría usar C # para construir un servidor COM nativo o un C / C ++ no administrado solicitud). Hablando oficialmente, el término utilizado para describir el código dirigido al tiempo de ejecución .NET es código administrado. La unidad binaria que contiene el código administrado se denomina ensamblaje (más detalles sobre ensamblados en solo un bit). Por el contrario, el código que no puede ser alojado directamente por el tiempo de ejecución .NET se denomina código no administrado.