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
- EventListenerClientSide.cs
- PageParser.cs
- WebBrowserUriTypeConverter.cs
- CharacterShapingProperties.cs
- StructuralCache.cs
- RuntimeResourceSet.cs
- SerTrace.cs
- _IPv4Address.cs
- DataTableExtensions.cs
- Metafile.cs
- SqlConnection.cs
- SectionUpdates.cs
- ImageConverter.cs
- UnaryQueryOperator.cs
- SafeLibraryHandle.cs
- __TransparentProxy.cs
- RtfToXamlLexer.cs
- VirtualPath.cs
- SystemTcpStatistics.cs
- AnnotationDocumentPaginator.cs
- SqlDataSourceView.cs
- MediaEntryAttribute.cs
- NullToBooleanConverter.cs
- DesignerActionListCollection.cs
- DataBoundControlDesigner.cs
- WebPartConnectionCollection.cs
- Light.cs
- X509Certificate2Collection.cs
- OperatingSystem.cs
- InputEventArgs.cs
- ParagraphVisual.cs
- WebPartPersonalization.cs
- RuleAttributes.cs
- SolidColorBrush.cs
- MetadataArtifactLoaderCompositeResource.cs
- ObjectCacheHost.cs
- HttpProxyTransportBindingElement.cs
- PropertyItemInternal.cs
- BitmapImage.cs
- SoapReflectionImporter.cs
- ConfigXmlAttribute.cs
- ServiceHttpHandlerFactory.cs
- Timer.cs
- OleDbTransaction.cs
- SafeNativeMethodsOther.cs
- TableLayoutSettingsTypeConverter.cs
- PostBackOptions.cs
- MeasurementDCInfo.cs
- HijriCalendar.cs
- DataGridColumnHeadersPresenter.cs
- MethodSet.cs
- FontCollection.cs
- ToolboxDataAttribute.cs
- MsdtcClusterUtils.cs
- SingleTagSectionHandler.cs
- ServiceHttpHandlerFactory.cs
- HttpHeaderCollection.cs
- SelectedDatesCollection.cs
- ConditionalAttribute.cs
- ArrangedElement.cs
- CodeDomConfigurationHandler.cs
- DictionarySectionHandler.cs
- PointLightBase.cs
- AlignmentXValidation.cs
- StickyNoteContentControl.cs
- ObjectDataSourceChooseMethodsPanel.cs
- ColorConverter.cs
- CompoundFileIOPermission.cs
- DataObjectEventArgs.cs
- CodeArgumentReferenceExpression.cs
- CollectionBase.cs
- _KerberosClient.cs
- PKCS1MaskGenerationMethod.cs
- FormViewPagerRow.cs
- TextDecoration.cs
- DeploymentSection.cs
- SafeIUnknown.cs
- ExpressionVisitor.cs
- LocationSectionRecord.cs
- HtmlValidationSummaryAdapter.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- CodeSnippetCompileUnit.cs
- HtmlTernaryTree.cs
- Helper.cs
- DesignerTransactionCloseEvent.cs
- SourceItem.cs
- MobileListItem.cs
- GridViewDeletedEventArgs.cs
- AttributeEmitter.cs
- WorkflowPrinting.cs
- WeakReferenceEnumerator.cs
- TextParagraphView.cs
- EntryIndex.cs
- AssertFilter.cs
- CalendarDataBindingHandler.cs
- MediaTimeline.cs
- FontUnit.cs
- TimelineGroup.cs
- ProcessHost.cs
- UserControlFileEditor.cs