Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Using FTP and clearing out memory
Message
De
26/04/2013 08:30:17
 
 
À
26/04/2013 06:18:21
Information générale
Forum:
ASP.NET
Catégorie:
Autre
Versions des environnements
Environment:
VB 9.0
OS:
Windows 7
Network:
Windows 2003 Server
Database:
MS SQL Server
Application:
Web
Divers
Thread ID:
01571897
Message ID:
01571959
Vues:
35
In case there are too many indents - or when you do not know how many objects to dispose
		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);
		}
		//______________________________________________________________________
	}
Gregory
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform