If an object implements IDisposable , you must get rid of it.
The best way to get rid of any object that implements IDisposable is to wrap the creation in a using statement:
using(var dset = SqlHelper.ExecuteDataset(Con, CommandType.StoredProcedure, "StoredProcedureName", arParms)) { }
The above example creates the correct delete pattern for the created object. Using this template is a good rule of thumb - if you do this all the time, the chances of you forgetting to get rid of something important are omitted.
As Tim Schmelter noted, I did not address the performance issue.
In the case of datasets, there will be no performance advantage since deletion in the constructor is suppressed as described in the answers to this SO question . At the same time, the overhead of calling dispose is minimal.
I suggest you check both approaches for your specific use case to see which one works best, and the advantages of using one parameter over another are minus.
Odded source share