Dica Rápida: Ganhando desempenho com o modificador Sealed
Olá! Esta é mais uma Dica Rápida e aqui vou demonstrar como uma simples palavra-chave da linguagem pode fazer o desempenho de sua aplicação aumentar. Parece inacreditável? Pois acredite, não é! Conhecendo a palavra-chave sealed sealed é uma palavra-chave que indica que uma dada classe não pode ser herdada, ou seja, que ela está fechada para extensão. O que essa palavra-chave esconde é uma informação muito útil ao compilador que, grosso modo é, ao visitar um método de uma classe sealed é líquido e certo que seu tipo não conterá qualquer derivação e, por isso, o compilador just in time (JIT) sabe que não precisa identificar se o tipo é herdado ou não. Um outro ponto é que, por conta desta identificação inequívoca, um método/membro invocado de uma classe sealed pode ser colocado em linha com o invocador, deixando a chamada mais rápida -- como quando se usa o atributo [MethodImpl(MethodImplOptions.AggressiveInlining)]. Veja só um exemplo de benchmarking bastante simples, baseado no código abaixo: public class Sealed { public class BaseType { public virtual int GetInt() => 1; } public class NonSealedType : BaseType { public override int GetInt() => 10; } public sealed class SealedType : BaseType { public override int GetInt() => 10; } private readonly NonSealedType nonSealed = new(); private readonly SealedType @sealed = new(); [Benchmark(Baseline = true)] public int GetIntNonSealed() => nonSealed.GetInt() + 42; [Benchmark] public int GetIntSealed() => @sealed.GetInt() + 42; } E o resultado foi o seguinte: Repare na diferença: quase 15x a favor da classe sealed! Por conta desta vantagem o time do .NET vem modificando e criando classes internas e privadas do runtime do .NET para sealed, de modo a melhorar seu desempenho -- aqui um post a respeito do assunto (em inglês). Como regra do polegar, recomendaria o seguinte: Se a classe é privada/interna e não é herdada, então sealed. Se a classe é pública e não é desejável que ela seja herdada, então sealed. De outro modo não faz sentido aplicar a palavra-chave. Gostou? Me deixe saber pelos indicadores. Caso deseje, deixe um comentário ou me procure nas redes sociais. Até a próxima!

Olá!
Esta é mais uma Dica Rápida e aqui vou demonstrar como uma simples palavra-chave da linguagem pode fazer o desempenho de sua aplicação aumentar.
Parece inacreditável? Pois acredite, não é!
Conhecendo a palavra-chave sealed
sealed
é uma palavra-chave que indica que uma dada classe não pode ser herdada, ou seja, que ela está fechada para extensão.
O que essa palavra-chave esconde é uma informação muito útil ao compilador que, grosso modo é, ao visitar um método de uma classe sealed
é líquido e certo que seu tipo não conterá qualquer derivação e, por isso, o compilador just in time (JIT) sabe que não precisa identificar se o tipo é herdado ou não. Um outro ponto é que, por conta desta identificação inequívoca, um método/membro invocado de uma classe sealed
pode ser colocado em linha com o invocador, deixando a chamada mais rápida -- como quando se usa o atributo [MethodImpl(MethodImplOptions.AggressiveInlining)]
.
Veja só um exemplo de benchmarking bastante simples, baseado no código abaixo:
public class Sealed
{
public class BaseType { public virtual int GetInt() => 1; }
public class NonSealedType : BaseType { public override int GetInt() => 10; }
public sealed class SealedType : BaseType { public override int GetInt() => 10; }
private readonly NonSealedType nonSealed = new();
private readonly SealedType @sealed = new();
[Benchmark(Baseline = true)]
public int GetIntNonSealed() =>
nonSealed.GetInt() + 42;
[Benchmark]
public int GetIntSealed() =>
@sealed.GetInt() + 42;
}
E o resultado foi o seguinte:
Repare na diferença: quase 15x a favor da classe sealed
!
Por conta desta vantagem o time do .NET vem modificando e criando classes internas e privadas do runtime do .NET para sealed
, de modo a melhorar seu desempenho -- aqui um post a respeito do assunto (em inglês).
Como regra do polegar, recomendaria o seguinte:
- Se a classe é privada/interna e não é herdada, então
sealed
. - Se a classe é pública e não é desejável que ela seja herdada, então
sealed
. - De outro modo não faz sentido aplicar a palavra-chave.
Gostou? Me deixe saber pelos indicadores. Caso deseje, deixe um comentário ou me procure nas redes sociais.
Até a próxima!