public static void Main() { StringBuilder loStringBuilder = new StringBuilder(); // this part outside the loop - even at class level if possible Uri uri = new Uri(lcURI); NetworkCredential credentials = new System.Net.NetworkCredential(cUsername, cPassword); // FTP setup var loFtpWebRequest = System.Net.FtpWebRequest.Create(uri); loFtpWebRequest.Credentials = credentials; loFtpWebRequest.Method = System.Net.WebRequestMethods.Ftp.ListDirectoryDetails; // If we use FTP/SSL (AUTH SSL) // If ( nNoFTPProtocol == 2) // loFtpWebRequest.EnableSsl = true; using( var toDispose = new DisposableCollection()) { var loFtpWebResponse = loFtpWebRequest.GetResponse(); toDispose.Add(loFtpWebResponse); var s = loFtpWebResponse.GetResponseStream(); toDispose.Add(s); var loStreamReader = new StreamReader(s); toDispose.Add(loStreamReader); loStringBuilder.Append(loStreamReader.ReadToEnd()); } Console.WriteLine("{0}", loStringBuilder.ToString()); Console.ReadLine(); } public class DisposableCollection : IDisposable { //______________________________________________________________________ private Stack<IDisposable> ObjectStack = new Stack<IDisposable>(); private bool Disposed = false; //______________________________________________________________________ public void Add(IDisposable obj) { if (Disposed) throw new ObjectDisposedException("Already disposed"); if( obj != null ) lock (ObjectStack) ObjectStack.Push(obj); } //______________________________________________________________________ public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } //______________________________________________________________________ protected virtual void Dispose(bool disposing) { if( !Disposed ) { Disposed = true; if (disposing) { if (ObjectStack != null) { lock (ObjectStack) { while (ObjectStack.Count > 0) { IDisposable obj = ObjectStack.Pop(); //Console.WriteLine("Disposing {0}", obj); obj.Dispose(); } } ObjectStack = null; } } // Release unmanaged resources } } //______________________________________________________________________ ~DisposableCollection() { Dispose(false); } //______________________________________________________________________ }