Using finalizers is not a good practice to use in .NET Core applications. Objects that use finalizers stay in memory longer and ultimately affect the application's performance.
Objects that are not required by the application at a particular point in time stay in the memory so that their Finalizer
method can be called. For example, if the object is considered dead by the GC in generation 0, it will always survive in generation 1.
In .NET Core, CLR maintains a separate thread to run the Finalizer
method. All the objects that contain the Finalizer
method are placed into the finalization queue. Any object that is no longer required by the application is placed in the F-Reachable queue, which is then executed by the dedicated finalizer thread.
The following diagram shows an object1
object that contains a Finalizer
method. The Finalizer
method is placed in the finalization queue and the object occupies the memory space in the Gen0
(generation 0) heap:
When the object is no longer...