Records

  • can be class or struct
  • creates methods overrides for enforcing value equality instead of reference equality:
    • Object.Equals
    • Object.GetHashCode
    • operators
      • ==
      • !=
  • implements IEquatable<> parameter
  • implements ToString
  • supports deconstruction
  • supports with expression
  • meant to be immutable

Positional records is a more concise syntax for record:

  • primary constructor parameters match the positional parameters of the record declaration
  • public init-only properties for each parameter

Further read:

https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/tutorials/records#characteristics-of-records

Is it possible to block GC?

We can.

  • for some critical part of application code using GC.TryStartNoGCRegion method.
  • using CER (Constrained Execution Regions) (obsolete)
  • with GC LatencyModes

Further read:

https://learn.microsoft.com/en-us/dotnet/api/system.gc.trystartnogcregion?redirectedfrom=MSDN&view=net-7.0#overloads

https://learn.microsoft.com/en-us/dotnet/framework/performance/constrained-execution-regions?redirectedfrom=MSDN

https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/latency