Datatable.Dispose() will make it remove from memory?

DataSet and DataTable don’t actually have any unmanaged resources, so Dispose() doesn’t actually do much. The Dispose() methods in DataSet and DataTable exists ONLY because of side effect of inheritance – in other words, it doesn’t actually do anything useful in the finalization.

It turns out that DataSets, DataViews, DataTables suppress finalization in their constructorsc this is why calling Dispose() on them explicitly does nothing.

Presumably, this happens because, as mentioned above, they don’t have unmanaged resources; so despite the fact that MarshalByValueComponent makes allowances for unmanaged resources, these particular implementations don’t have the need and can therefore forgo finalization.

Overview of this Immense Answer:

Without a doubt, Dispose should be called on any Finalizable objects.

DataTables are Finalizable.

Calling Dispose significantly speeds up the reclaiming of memory.

MarshalByValueComponent calls GC.SuppressFinalize(this) in its Dispose() – skipping this means having to wait for dozens if not hundreds of Gen0 collections before memory is reclaimed.

Further Reading:

See this question and the related answer.

Leave a Comment