Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Using FTP and clearing out memory
Message
De
26/04/2013 08:50:41
 
 
À
26/04/2013 08:30:17
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:
01571962
Vues:
32
>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);
>		}
>		//______________________________________________________________________
>	}
>
Very neat !
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform