CA1821: remover finalizadores vazios
TypeName |
RemoveEmptyFinalizers |
CheckId |
CA1821 |
Categoria |
Microsoft.Performance |
Alteração Significativa |
Sem quebra |
Causa
Um tipo implementa um finalizador que está vazia, chama somente o finalizador do tipo de base, ou chama somente métodos condicional emissores.
Descrição da Regra
Sempre que possível, para evitar finalizers devido à sobrecarga adicional de desempenho que é envolvida no tempo de vida do objeto de rastreamento.O coletor de lixo será executado o finalizador antes de coleta o objeto.Isso significa que duas coleções serão necessárias coletar o objeto.Um finalizador vazia incorre essa sobrecarga adicionada sem nenhum benefício.
Como Corrigir Violações
Remova o finalizador vazia.Se um finalizador depurando, é necessário incluir o finalizador inteiro em políticas de #if DEBUG / #endif .
Quando Suprimir Alertas
Não suprima uma mensagem desta regra.A falha suprimir o desempenho de reduz de acabamento e não fornece nenhum benefício.
Exemplo
O exemplo a seguir mostra um finalizador vazio que deve ser removido, um finalizador que deve ser incluído em políticas de #if DEBUG / #endif , e um finalizador que use as políticas de #if DEBUG / #endif corretamente.
using System.Diagnostics;
public class Class1
{
// Violation occurs because the finalizer is empty.
~Class1()
{
}
}
public class Class2
{
// Violation occurs because Debug.Fail is a conditional method.
// The finalizer will contain code only if the DEBUG directive
// symbol is present at compile time. When the DEBUG
// directive is not present, the finalizer will still exist, but
// it will be empty.
~Class2()
{
Debug.Fail("Finalizer called!");
}
}
public class Class3
{
#if DEBUG
// Violation will not occur because the finalizer will exist and
// contain code when the DEBUG directive is present. When the
// DEBUG directive is not present, the finalizer will not exist,
// and therefore not be empty.
~Class3()
{
Debug.Fail("Finalizer called!");
}
#endif
}