If you don't do this dlg.Dispose() will not be called until when your application exits - which is very bad.
There is a great discussion of it here. I've tested and found the same thing - the Dispose method is not called until either it is called explicitly or the app exits. Closing a dialog created with ShowDialog does not call dispose.
Do you find this useful? If so please check out Windward Reports.