Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Net / System / Net / ConnectionPoolManager.cs / 1305376 / ConnectionPoolManager.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Net { using System; using System.Collections; using System.Diagnostics; using System.Security; using System.Security.Permissions; using System.Threading; using System.Globalization; internal class ConnectionPoolManager { private static Hashtable m_ConnectionPools = new Hashtable(); // Hashtable used for connection pools private static object s_InternalSyncObject; private ConnectionPoolManager() { } private static object InternalSyncObject { get { if (s_InternalSyncObject == null) { object o = new Object(); Interlocked.CompareExchange(ref s_InternalSyncObject, o, null); } return s_InternalSyncObject; } } /*internal static ConnectionPool[] ConnectionPools { get { lock(InternalSyncObject) { ConnectionPool [] connectionPools = new ConnectionPool[m_ConnectionPools.Count]; m_ConnectionPools.CopyTo(connectionPools, 0); return connectionPools; } } } */ private static string GenerateKey(string hostName, int port, string groupName) { return hostName+"\r"+port.ToString(NumberFormatInfo.InvariantInfo)+"\r"+groupName; } internal static ConnectionPool GetConnectionPool(ServicePoint servicePoint, string groupName, CreateConnectionDelegate createConnectionCallback) { string key = GenerateKey(servicePoint.Host, servicePoint.Port, groupName); lock(InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool) m_ConnectionPools[key]; if (connectionPool == null) { connectionPool = new ConnectionPool(servicePoint, servicePoint.ConnectionLimit, 0, servicePoint.MaxIdleTime, createConnectionCallback); m_ConnectionPools[key] = connectionPool; } return connectionPool; } } /* internal static ConnectionPool GetConnectionPool(string hostName, int port, string groupName, CreateConnectionDelegate createConnectionCallback) { string key = hostName + "\r" + port.ToString(NumberFormatInfo.InvariantInfo) + "\r" + groupName; lock(InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool) m_ConnectionPools[key]; if (connectionPool == null) { ServicePoint servicePoint = ServicePointManager.FindServicePoint(new Uri("sockets://" + hostName + ":" + port.ToString(NumberFormatInfo.InvariantInfo)), null); connectionPool = new ConnectionPool(servicePoint, m_DefaultMaxPool, 0, servicePoint.MaxIdleTime, createConnectionCallback); m_ConnectionPools[key] = connectionPool; } return connectionPool; } } */ internal static bool RemoveConnectionPool(ServicePoint servicePoint, string groupName) { string key = GenerateKey(servicePoint.Host, servicePoint.Port, groupName); lock(InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool)(m_ConnectionPools[key]); if(connectionPool != null) { m_ConnectionPools[key] = null; m_ConnectionPools.Remove(key); return true; } } return false; } // Gets the connection pool for the specified service point (if it exists) and // invokes ForceCleanup to gracefully clean up any connections in the pool. // // preconditions: none // // postconditions: if a connection pool for the specified servicepoint and group name // exists, any open connections that are not in use will be gracefully cleaned up. // // Note: this will not destroy the connection pool itself so any future objects that // need that connection pool will still be able to access it to create new connections // and any objects using connections in the pool will still be able to return them internal static void CleanupConnectionPool(ServicePoint servicePoint, string groupName) { string key = GenerateKey(servicePoint.Host, servicePoint.Port, groupName); lock (InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool)(m_ConnectionPools[key]); if (connectionPool != null) { connectionPool.ForceCleanup(); } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Net { using System; using System.Collections; using System.Diagnostics; using System.Security; using System.Security.Permissions; using System.Threading; using System.Globalization; internal class ConnectionPoolManager { private static Hashtable m_ConnectionPools = new Hashtable(); // Hashtable used for connection pools private static object s_InternalSyncObject; private ConnectionPoolManager() { } private static object InternalSyncObject { get { if (s_InternalSyncObject == null) { object o = new Object(); Interlocked.CompareExchange(ref s_InternalSyncObject, o, null); } return s_InternalSyncObject; } } /*internal static ConnectionPool[] ConnectionPools { get { lock(InternalSyncObject) { ConnectionPool [] connectionPools = new ConnectionPool[m_ConnectionPools.Count]; m_ConnectionPools.CopyTo(connectionPools, 0); return connectionPools; } } } */ private static string GenerateKey(string hostName, int port, string groupName) { return hostName+"\r"+port.ToString(NumberFormatInfo.InvariantInfo)+"\r"+groupName; } internal static ConnectionPool GetConnectionPool(ServicePoint servicePoint, string groupName, CreateConnectionDelegate createConnectionCallback) { string key = GenerateKey(servicePoint.Host, servicePoint.Port, groupName); lock(InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool) m_ConnectionPools[key]; if (connectionPool == null) { connectionPool = new ConnectionPool(servicePoint, servicePoint.ConnectionLimit, 0, servicePoint.MaxIdleTime, createConnectionCallback); m_ConnectionPools[key] = connectionPool; } return connectionPool; } } /* internal static ConnectionPool GetConnectionPool(string hostName, int port, string groupName, CreateConnectionDelegate createConnectionCallback) { string key = hostName + "\r" + port.ToString(NumberFormatInfo.InvariantInfo) + "\r" + groupName; lock(InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool) m_ConnectionPools[key]; if (connectionPool == null) { ServicePoint servicePoint = ServicePointManager.FindServicePoint(new Uri("sockets://" + hostName + ":" + port.ToString(NumberFormatInfo.InvariantInfo)), null); connectionPool = new ConnectionPool(servicePoint, m_DefaultMaxPool, 0, servicePoint.MaxIdleTime, createConnectionCallback); m_ConnectionPools[key] = connectionPool; } return connectionPool; } } */ internal static bool RemoveConnectionPool(ServicePoint servicePoint, string groupName) { string key = GenerateKey(servicePoint.Host, servicePoint.Port, groupName); lock(InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool)(m_ConnectionPools[key]); if(connectionPool != null) { m_ConnectionPools[key] = null; m_ConnectionPools.Remove(key); return true; } } return false; } // Gets the connection pool for the specified service point (if it exists) and // invokes ForceCleanup to gracefully clean up any connections in the pool. // // preconditions: none // // postconditions: if a connection pool for the specified servicepoint and group name // exists, any open connections that are not in use will be gracefully cleaned up. // // Note: this will not destroy the connection pool itself so any future objects that // need that connection pool will still be able to access it to create new connections // and any objects using connections in the pool will still be able to return them internal static void CleanupConnectionPool(ServicePoint servicePoint, string groupName) { string key = GenerateKey(servicePoint.Host, servicePoint.Port, groupName); lock (InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool)(m_ConnectionPools[key]); if (connectionPool != null) { connectionPool.ForceCleanup(); } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WindowsListViewGroupHelper.cs
- AVElementHelper.cs
- BooleanStorage.cs
- IPHostEntry.cs
- ProcessThreadCollection.cs
- SemanticBasicElement.cs
- ItemMap.cs
- EventListenerClientSide.cs
- selecteditemcollection.cs
- Int64KeyFrameCollection.cs
- PointAnimationUsingKeyFrames.cs
- webeventbuffer.cs
- DataRowChangeEvent.cs
- DataGridViewRowEventArgs.cs
- CounterCreationDataCollection.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- DbConnectionOptions.cs
- DrawingContextDrawingContextWalker.cs
- CoTaskMemHandle.cs
- StaticFileHandler.cs
- ToolStripDropDownButton.cs
- User.cs
- AppLevelCompilationSectionCache.cs
- UriSection.cs
- TemplateAction.cs
- DirectoryInfo.cs
- SplashScreen.cs
- SchemaTypeEmitter.cs
- Enum.cs
- IPPacketInformation.cs
- TextRange.cs
- RulePatternOps.cs
- CheckBoxBaseAdapter.cs
- ScriptingJsonSerializationSection.cs
- ListViewInsertedEventArgs.cs
- DesignerTextViewAdapter.cs
- StructuredTypeInfo.cs
- TagPrefixInfo.cs
- IResourceProvider.cs
- HttpDigestClientCredential.cs
- FormConverter.cs
- ListItemCollection.cs
- CompositionAdorner.cs
- FileChangesMonitor.cs
- WindowsRegion.cs
- Encoder.cs
- HttpCapabilitiesEvaluator.cs
- TaskResultSetter.cs
- InternalSafeNativeMethods.cs
- SQLInt64.cs
- SQlBooleanStorage.cs
- DataSourceHelper.cs
- StandardToolWindows.cs
- Bold.cs
- RemoteWebConfigurationHost.cs
- PrePrepareMethodAttribute.cs
- SignatureTargetIdManager.cs
- InkCanvasInnerCanvas.cs
- HttpWebRequest.cs
- CreateUserWizardStep.cs
- TypeDelegator.cs
- HttpProfileBase.cs
- WebReferencesBuildProvider.cs
- DesignConnection.cs
- ProcessManager.cs
- ConfigWriter.cs
- EmptyReadOnlyDictionaryInternal.cs
- DataServiceHost.cs
- HotSpotCollection.cs
- Event.cs
- ColumnPropertiesGroup.cs
- RegistryKey.cs
- TransportContext.cs
- XamlReaderHelper.cs
- DataExpression.cs
- ModifyActivitiesPropertyDescriptor.cs
- TraceFilter.cs
- Int32AnimationUsingKeyFrames.cs
- DocumentAutomationPeer.cs
- RubberbandSelector.cs
- AnonymousIdentificationSection.cs
- RelationshipDetailsCollection.cs
- BmpBitmapEncoder.cs
- SettingsAttributeDictionary.cs
- HttpSessionStateWrapper.cs
- RSAOAEPKeyExchangeFormatter.cs
- DateTimeOffset.cs
- ViewGenResults.cs
- ConfigurationManagerInternal.cs
- FontUnit.cs
- EventProvider.cs
- CodePropertyReferenceExpression.cs
- TextTabProperties.cs
- DataViewManagerListItemTypeDescriptor.cs
- Matrix3D.cs
- DirtyTextRange.cs
- Int32KeyFrameCollection.cs
- DataViewManager.cs
- GraphicsPath.cs
- DataException.cs