How to effectively dispose unmanaged resources? - C#