Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- UserControlBuildProvider.cs
- DelimitedListTraceListener.cs
- CompiledQueryCacheKey.cs
- PartialTrustVisibleAssemblyCollection.cs
- DynamicControl.cs
- XmlSchemaNotation.cs
- WorkflowElementDialogWindow.xaml.cs
- ObjRef.cs
- AuthenticationServiceManager.cs
- ArrayList.cs
- Comparer.cs
- WebPartsPersonalization.cs
- wmiprovider.cs
- XamlRtfConverter.cs
- ProfessionalColors.cs
- SourceElementsCollection.cs
- ClassDataContract.cs
- SortedDictionary.cs
- DataControlImageButton.cs
- MarkupProperty.cs
- FontFamily.cs
- WebPartCatalogAddVerb.cs
- CacheSection.cs
- UnregisterInfo.cs
- ZoneLinkButton.cs
- LookupNode.cs
- InputProcessorProfilesLoader.cs
- EntityObject.cs
- SocketElement.cs
- TabControl.cs
- EntityDataSourceConfigureObjectContext.cs
- CodeArgumentReferenceExpression.cs
- ActivationWorker.cs
- RestHandlerFactory.cs
- MdImport.cs
- thaishape.cs
- CatalogPart.cs
- XmlSchemaFacet.cs
- EntityDataSourceWrapperPropertyDescriptor.cs
- FlowDocumentView.cs
- SharedRuntimeState.cs
- DataGridViewLinkCell.cs
- StandardOleMarshalObject.cs
- MethodCallConverter.cs
- CustomTypeDescriptor.cs
- CssStyleCollection.cs
- ContractDescription.cs
- ExtensibleClassFactory.cs
- CanonicalFontFamilyReference.cs
- DetailsViewUpdatedEventArgs.cs
- XmlSerializerAssemblyAttribute.cs
- UIAgentRequest.cs
- RsaSecurityTokenAuthenticator.cs
- EntityStoreSchemaGenerator.cs
- TextDecorationCollection.cs
- TableLayoutPanelBehavior.cs
- SetMemberBinder.cs
- Encoder.cs
- RuleInfoComparer.cs
- IndexedEnumerable.cs
- MemoryMappedViewAccessor.cs
- ObjectDataSource.cs
- EntityDataSourceSelectingEventArgs.cs
- CustomAttributeFormatException.cs
- HwndKeyboardInputProvider.cs
- EntitySqlQueryCacheEntry.cs
- StringDictionaryEditor.cs
- StickyNoteContentControl.cs
- MemberExpression.cs
- SqlClientPermission.cs
- JavaScriptSerializer.cs
- MediaElementAutomationPeer.cs
- PresentationAppDomainManager.cs
- Sql8ExpressionRewriter.cs
- DataControlExtensions.cs
- InputScopeConverter.cs
- SemaphoreSecurity.cs
- ActivationArguments.cs
- ReflectPropertyDescriptor.cs
- CapabilitiesState.cs
- IsolatedStorageException.cs
- Exceptions.cs
- GeometryCollection.cs
- WebSysDescriptionAttribute.cs
- CalendarTable.cs
- LockedAssemblyCache.cs
- XD.cs
- ContextMenuStripGroupCollection.cs
- VirtualPath.cs
- SafeBuffer.cs
- GridViewEditEventArgs.cs
- XmlSchemaInclude.cs
- DataControlPagerLinkButton.cs
- TabItem.cs
- SamlAssertion.cs
- CompositeControl.cs
- CallbackDebugBehavior.cs
- XmlSchemaIdentityConstraint.cs
- TextComposition.cs
- BinaryNode.cs