Pergunta

Eu gostaria de uma resposta de alguém que realmente faça programação em tempo real em C# ou que realmente entenda os internos do idioma.

Sei que as exceções não devem ser usadas para lidar com processamento normal, mas apenas para detectar condições de erro. Há muita discussão sobre esse tópico.

Eu gostaria de saber se há algum tempo de execução desacelerado de simplesmente ter um bloco de tentativa/captura no lugar (que nunca captura uma exceção, a menos que o programa tenha que terminar de qualquer maneira). O bloco de tentativa/captura está dentro de uma função que deve ser chamada repetidamente. Eu suspeito que exista apenas um custo mínimo.

O custo pode ser quantificado em termos de ciclos da CPU ou outras tarefas (o mesmo custo que uma multiplicação de pontos flutuantes) ou outra maneira?

Usamos o Microsoft C#.NET 3.5 no Windows XP.

Foi útil?

Solução

As exceções .NET têm um custo indireto muito, muito baixo, a menos que sejam jogadas. Ter um bloco de tentativa/captura no lugar terá um impacto no desempenho muito mínimo. Eu não encontrei quase nenhum impacto, mesmo em loops muito rápidos e apertados, a ter um manuseio de exceção no lugar.

No entanto, as exceções no .NET são muito caras quando são jogadas. Eles tendem a ter muito impacto no desempenho se você os jogar do que muitos outros idiomas. Isso se deve às informações de pilha completa obtidas quando a exceção é criada, etc.

Esse é o comportamento oposto a alguns outros idiomas, como o Python, onde o manuseio de exceções tem um custo mais alto, mas o arremesso é realmente bastante executado.

No entanto, se você estiver preocupado, sugiro que você perfu seu perfil de sua rotina e teste você mesmo. Essa tem sido minha experiência depois de um pouco de perfil de desempenho. Não há substituição por medir em sua própria base de código.

Outras dicas

Boa discussão, com métricas, de implicações de desempenho de experimentar aqui.

Os blocos de tentativa/captura prejudicam o desempenho quando as exceções não são jogadas?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top