Estou usando um comando específico no meu código c #, que funciona bem. No entanto, é dito que ele se comporta mal no código "não gerenciado".
O que é código gerenciado ou não gerenciado?
Estou usando um comando específico no meu código c #, que funciona bem. No entanto, é dito que ele se comporta mal no código "não gerenciado".
O que é código gerenciado ou não gerenciado?
Respostas:
Aqui está um texto do MSDN sobre código não gerenciado .
Algum código de biblioteca precisa chamar código não gerenciado (por exemplo, APIs de código nativo, como o Win32). Como isso significa sair do perímetro de segurança do código gerenciado, é necessário o devido cuidado.
Aqui estão outras explicações complementares sobre o código gerenciado:
Para o seu problema:
Eu acho que é porque o NUnit executa seu código para UnitTesting e pode ter uma parte dele que não é gerenciada. Mas não tenho certeza, então não tome isso por ouro. Tenho certeza de que alguém poderá fornecer mais informações sobre isso. Espero que ajude!
Este é um bom artigo sobre o assunto.
Para resumir,
Um programa de aplicativo que é executado em um mecanismo de tempo de execução instalado na mesma máquina. O aplicativo não pode ser executado sem ele. O ambiente de tempo de execução fornece a biblioteca geral de rotinas de software que o programa usa e geralmente executa o gerenciamento de memória. Também pode fornecer conversão just-in-time (JIT) do código-fonte para o código executável ou de um idioma intermediário para o código executável. Java, Visual Basic e Common Language Runtime (CLR) do .NET são exemplos de mecanismos de tempo de execução. ( Leia mais )
Um programa executável que é executado sozinho. Lançado no sistema operacional, o programa chama e usa as rotinas de software no sistema operacional, mas não requer que outro sistema de software seja usado. Programas de linguagem assembly que foram montados em linguagem de máquina e programas C / C ++ compilados em linguagem de máquina para uma plataforma específica são exemplos de código não gerenciado ( Leia mais )
Quando você pensa em não gerenciado , pense no código específico da máquina e no nível da máquina. Como linguagem assembly x86. O código não gerenciado (nativo) é compilado e vinculado para ser executado diretamente no processador para o qual foi projetado, excluindo todo o material do sistema operacional no momento. Não é portátil, mas é rápido. Código muito simples e simples.
Código gerenciado é tudo, desde Java ao antigo Interpretive BASIC, ou qualquer coisa que seja executada no .NET. O código gerenciado normalmente é compilado em um conjunto de instruções de código P de nível intermediário ou código de bytes. Essas instruções não são específicas da máquina, embora pareçam com a linguagem assembly. O código gerenciado isola o programa da máquina em que está sendo executado e cria um limite seguro no qual toda a memória é alocada indiretamente e, de um modo geral, você não tem acesso direto aos recursos da máquina, como portas, espaço de endereço da memória, pilha, etc. A idéia é executar em um ambiente mais seguro.
Para converter de uma variável gerenciada, digamos, para uma variável não gerenciada, você precisa acessar o próprio objeto real. Provavelmente está embrulhado ou embalado em algumas embalagens adicionais. Variáveis não gerenciadas (como um 'int', por exemplo) - em uma máquina de 32 bits - levam exatamente 4 bytes. Não há sobrecarga ou embalagem adicional. O processo de passar do código gerenciado para o não gerenciado - e vice-versa - é chamado de " empacotamento ". Ele permite que seus programas ultrapassem os limites.
No menor número de palavras possível:
Código gerenciado é o que os compiladores C # .Net, VB.Net, F # .Net etc criam. É executado no CLR, que, entre outras coisas, oferece serviços como coleta de lixo e verificação de referências e muito mais. Então pense nisso, meu código é gerenciado pelo CLR.
Por outro lado, o código não gerenciado compila diretamente o código da máquina. Ele não gerencia pelo CLR.
Código gerenciado:
código executado sob um "contrato de cooperação" com o Common Language Runtime. O código gerenciado deve fornecer os metadados necessários para o tempo de execução para fornecer serviços como gerenciamento de memória, integração entre idiomas, segurança de acesso ao código e controle automático da vida útil dos objetos. Todo o código baseado na linguagem intermediária da Microsoft (MSIL) é executado como código gerenciado.Código não gerenciado:
código criado sem considerar as convenções e requisitos do Common Language Runtime. O código não gerenciado é executado no ambiente de tempo de execução do idioma comum com serviços mínimos (por exemplo, sem coleta de lixo, depuração limitada e assim por diante).
Referência: http://www.dotnetspider.com/forum/11612-difference-between-managed-and-unmanaged-code.aspx
O código gerenciado é executado dentro do ambiente do CLR, ou seja, o tempo de execução do .NET. Em resumo, todos os IL são código gerenciado. sobre a execução do código fonte do idioma.
Código gerenciado: - código que formato MSIL (idioma intermediário) é desenvolvido após a compilação do compilador de idiomas e executado diretamente pelo CLR
código gerenciado chamado. por exemplo: - Todo o código de 61 idiomas suportado pela estrutura .net
Código não gerenciado: - o código desenvolvido anteriormente .net
para o qual o formulário MSIL não está disponível e é executado CLR
diretamente, em vez disso, CLR
será redirecionado para o sistema operacional, conhecido como código não gerenciado.
por exemplo: -COM, APIs do Win32
Antes de tudo, entendamos que, antes .NET framework
, Microsoft
fornecíamos produtos independentes, como MFC (Visual C++), VB, FoxPro
etc.
Em 2002, a Microsoft combinou seus produtos e criou o framework .NET. Agora há uma diferença entre como o código foi executado antes e como o código é gerenciado e executado no .NET framework. A Microsoft introduziu o conceito do CLR
.NET Framework, que compila o código proveniente de qualquer linguagem suportada do .NET Framework e fornece funcionalidades adicionais como memory mangement, garbage collection
etc. Mas esses recursos CLR não estavam disponíveis diretamente antes.
Portanto, se você estiver criando biblioteca / código no .NET framework (compilado com CLR), isso será chamado
Managed code
. Você pode usar essa biblioteca ainda mais em outro aplicativo / projeto .NET e, também, o CLR entenderá como foi compilada antes, e é por isso que permanece o seu código de gerenciamento.
OTOH, se você deseja usar as bibliotecas que foram escritas antes da estrutura .NET, pode fazer com certas limitações, mas lembre-se, como o CLR não estava lá naquele momento, agora o CLR não entenderá e compilará este código novamente . E isso será chamado unmanaged code
. Observe que bibliotecas / assemblies criados por terceiros para fornecer determinados recursos / ferramentas também podem ser considerados como código não gerenciado se não for compatível com CLR.
Em termos leigos, o código Manage é algo que o seu CLR entende e pode compilá-lo por conta própria para posterior execução. No .NET framework, (de qualquer idioma que funcione no .NET framework). Quando o código for para o CLR, o código fornecerá algumas informações de metadados, para que o CLR possa fornecer os recursos especificados aqui . Poucos deles são Garbage collection, Performance improvements, cross-language integration, memory management
etc.
OTOH, código não gerenciado é algo específico para a máquina e pronto para uso, sem necessidade de processá-lo ainda mais.
Do Pro C # 5 e do .NET 4.5 Framework:
Código gerenciado versus não gerenciado: Talvez o ponto mais importante a ser entendido sobre a linguagem C # é que ela pode produzir código que pode ser executado apenas no tempo de execução do .NET (você nunca pode usar o C # para criar um servidor COM nativo ou um C / C ++ não gerenciado inscrição). Oficialmente, o termo usado para descrever o código destinado ao tempo de execução do .NET é código gerenciado. A unidade binária que contém o código gerenciado é denominada assembly (mais detalhes sobre os assemblies daqui a pouco). Por outro lado, o código que não pode ser hospedado diretamente pelo tempo de execução do .NET é denominado código não gerenciado.