Destructors always called when CLR decides that it have to clean the some old objects in Memory for long Time. You can not Rely on That destructor. Instead of that you should use Dispose() if you want to clean up some resources when they are not needed (especially when you have any unmanaged resources such as TCP connections, SQL connections etc.)