Regiões de execução restrita

Uma região de execução restrita (CER) é parte de um mecanismo para a criação de código gerenciado confiável.Uma CER define uma área em que o common linguagem tempo de execução (CLR) é restringido de gerar exceções fora de banda que impediria que o código na área de execução em sua totalidade.Dentro dessa região, código do usuário fica restrito de executar código resultaria no lançamento de exceções fora de banda.The PrepareConstrainedRegions método deve preceder imediatamente um try bloco e marcas catch, finally, e fault blocos sistema autônomo regiões de execução restrita. Depois de marcada sistema autônomo uma região restrita, o código deve apenas telefonar Outros código com confiabilidade sólida de contratos e código não deve alocar ou fazer virtual telefonar sistema autônomo métodos não preparados ou não confiáveis a menos que o código está preparado para lidar com falhas.Anula o thread de atrasos CLR para o código que está sendo executado em uma CER.

Regiões são usados em diferentes formulários no CLR juntamente com um com anotações de execução restritatry bloquear, notadamente finalizadores críticos executando em classes derivadas da CriticalFinalizerObject classe e o código executado usando o ExecuteCodeWithGuaranteedCleanup método.

Preparação da CER antecipada

O CLR prepara as CERs antecedência para evitar condições memória insuficiente.Preparação antecipada é necessária para que o CLR não causa uma falta de condição de memória durante o carregamento de tipo ou compilação just-in-time.

O desenvolvedor é necessário para indicar que uma região de código é uma CER:

Restrições

Os usuários são limitados no tipo de código que podem escrever em uma CER.O código não pode causar uma exceção de fora de banda, sistema autônomo pode resultar entre sistema autônomo seguintes operações:

  • Alocação explícita.

  • Conversão boxing.

  • Adquirir um bloquear.

  • Chamando métodos não preparados virtualmente.

  • Chamando métodos com um contrato de confiabilidade fraco ou não existente.

No .NET estrutura versão 2.0, essas restrições são diretrizes.Diagnóstico é fornecido através de ferramentas de análise de código.

Contratos de confiabilidade

The ReliabilityContractAttribute é um atributo personalizado que documenta as garantias de confiabilidade e o estado de corrupção de um determinado método.

Garantias de confiabilidade

Garantias de confiabilidade, representadas por Cer valores de enumeração, indicam o grau de confiabilidade de um determinado método:

  • MayFail.Sob condições excepcionais, o método pode falhar.Nesse caso, o método relatórios volta para o método de chamada seja bem-sucedida ou falha.O método deve estar contido em uma CER para garantir que ele pode relatório o valor retornado.

  • None.O método, tipo ou assembly não tem nenhum conceito de uma CER e não é mais provável seguro chamar dentro de uma CER sem redução substancial de dano de estado.Ele não tirar proveito de garantias CER.Isso implica a seguir:

    1. Sob condições excepcionais, o método pode falhar.

    2. O método pode ou não pode relatar que falhou.

    3. O método não é gravado para usar uma CER, o cenário mais provável.

    4. Se um método, tipo ou assembly não é identificado explicitamente seja bem-sucedida, ele implicitamente é identificado sistema autônomo None.

  • Success.Sob condições excepcionais, é garantido que o método seja bem-sucedida.Para atingir esse nível de confiabilidade, você sempre deve construir uma CER em torno do método é chamado, mesmo quando ele é chamado de dentro de uma região não-CER.Um método é bem-sucedido se realiza o que se destina, embora possa ser visualizado sucesso subjectively.Por exemplo, marcando contar com ReliabilityContractAttribute(Cer.Success) significa que quando ele é executado em uma CER, ele sempre retorna uma contagem do número de elementos de ArrayList e ele nunca pode deixar os campos internos em um estado indeterminado. No entanto, a CompareExchange método está marcado sistema autônomo sucesso, com o entendimento de sucesso pode significar que o valor não pode ser substituído por um novo valor devido a uma condição de corrida. O ponto principal é que o método se comporta da maneira que está documentado se comportar e CER código não precisa ser escrita para qualquer comportamento incomum além do que o código correto, mas não confiável seria de esperar.

Níveis de corrupção

Corrupção de níveis, representados por Consistency valores de enumeração indicam quanto estado pode ser corrompido de determinado ambiente:

  • MayCorruptAppDomain.Sob condições excepcionais, o common linguagem tempo de execução (CLR) não garante em relação ao estado de consistência no domínio do aplicativo corrente.

  • MayCorruptInstance.Sob condições excepcionais, o método é garantido para limitar o dano de estado à instância corrente.

  • MayCorruptProcessSob condições excepcionais, o CLR não garante sobre consistência de estado; ou seja, a condição pode corromper o processo.

  • WillNotCorruptState.Sob condições excepcionais, o método é garantido para não corromper o estado.

Confiabilidade try/catch/finally

A confiabilidade try/catch/finally uma exceção está lidando com mecanismo com o mesmo nível de previsibilidade garantias de que a versão não gerenciada. The catch/finally bloco é da CER. O bloco de métodos exigem preparativos prévios e devem ser noninterruptible.

No .NET estrutura versão 2.0, código informa ao tempo de execução que um bloco try é confiável chamando PrepareConstrainedRegions imediatamente antes de um bloco try. PrepareConstrainedRegions é um membro de RuntimeHelpers, uma classe de suporte do compilador. De telefonarPrepareConstrainedRegions diretamente com sua disponibilidade por meio de compiladores pendente.

Noninterruptible regiões

Uma região noninterruptible agrupa um conjunto de instruções em uma CER.

No .NET estrutura versão 2.0, disponibilidade por meio de suporte do compilador, o código de usuário cria regiões não passível de interrupção com um confiável try/catch/finally que contém um bloco try/catch vazio precedido por um PrepareConstrainedRegions telefonar de método.

Objeto finalizador crítico

A CriticalFinalizerObject garante que a coleta de lixo executará o finalizador. Após a alocação, o finalizador e seu gráfico de telefonar são preparados antecipadamente.O método do finalizador é executado em uma CER e deve obedecer a todas as restrições nas CERs e finalizadores.

Os tipos que herdam SafeHandle e CriticalHandle é garantido que tenha seu finalizador executar dentro de uma CER. Implementar ReleaseHandle em SafeHandle classes para executar qualquer código que é necessária para liberar o identificador derivadas.

Código não é permitido nas CERs

As operações a seguir não são permitidas em CERs:

  • Alocações explícitas.

  • Adquirir um bloquear.

  • Conversão boxing.

  • Acesso à matriz multidimensional.

  • Chamadas de método por meio de reflexão.

  • Enter ou Lock.

  • Verificações de segurança.Não execute demandas, só vincular demandas.

  • Isinst e Castclass para objetos COM e proxies

  • Obter ou definir campos em um proxy transparente.

  • Serialização.

  • Ponteiros de função e delegados.

Consulte também

Conceitos

Práticas recomendadas de confiabilidade