Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / BufferAllocator.cs / 1305376 / BufferAllocator.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * Buffer Allocators with recycling * * Copyright (c) 1999 Microsoft Corporation */ namespace System.Web { using System.Collections; using System.IO; using System.Globalization; using System.Web.Util; ////////////////////////////////////////////////////////////////////////////// // Generic buffer recycling /* * Base class for allocator doing buffer recycling */ internal abstract class BufferAllocator { private int _maxFree; private int _numFree; private Stack _buffers; private static int s_ProcsFudgeFactor; static BufferAllocator() { s_ProcsFudgeFactor = SystemInfo.GetNumProcessCPUs(); if (s_ProcsFudgeFactor < 1) s_ProcsFudgeFactor = 1; if (s_ProcsFudgeFactor > 4) s_ProcsFudgeFactor = 4; } internal BufferAllocator(int maxFree) { _buffers = new Stack(); _numFree = 0; _maxFree = maxFree * s_ProcsFudgeFactor; } internal /*public*/ Object GetBuffer() { Object buffer = null; if (_numFree > 0) { lock(this) { if (_numFree > 0) { buffer = _buffers.Pop(); _numFree--; } } } if (buffer == null) buffer = AllocBuffer(); return buffer; } internal void ReuseBuffer(Object buffer) { if (_numFree < _maxFree) { lock(this) { if (_numFree < _maxFree) { _buffers.Push(buffer); _numFree++; } } } } /* * To be implemented by a derived class */ abstract protected Object AllocBuffer(); } /* * Concrete allocator class for ubyte[] buffer recycling */ internal class UbyteBufferAllocator : BufferAllocator { private int _bufferSize; internal UbyteBufferAllocator(int bufferSize, int maxFree) : base(maxFree) { _bufferSize = bufferSize; } protected override Object AllocBuffer() { return new byte[_bufferSize]; } } /* * Concrete allocator class for char[] buffer recycling */ internal class CharBufferAllocator : BufferAllocator { private int _bufferSize; internal CharBufferAllocator(int bufferSize, int maxFree) : base(maxFree) { _bufferSize = bufferSize; } protected override Object AllocBuffer() { return new char[_bufferSize]; } } /* * Concrete allocator class for int[] buffer recycling */ internal class IntegerArrayAllocator : BufferAllocator { private int _arraySize; internal IntegerArrayAllocator(int arraySize, int maxFree) : base(maxFree) { _arraySize = arraySize; } protected override Object AllocBuffer() { return new int[_arraySize]; } } /* * Concrete allocator class for IntPtr[] buffer recycling */ internal class IntPtrArrayAllocator : BufferAllocator { private int _arraySize; internal IntPtrArrayAllocator(int arraySize, int maxFree) : base(maxFree) { _arraySize = arraySize; } protected override Object AllocBuffer() { return new IntPtr[_arraySize]; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * Buffer Allocators with recycling * * Copyright (c) 1999 Microsoft Corporation */ namespace System.Web { using System.Collections; using System.IO; using System.Globalization; using System.Web.Util; ////////////////////////////////////////////////////////////////////////////// // Generic buffer recycling /* * Base class for allocator doing buffer recycling */ internal abstract class BufferAllocator { private int _maxFree; private int _numFree; private Stack _buffers; private static int s_ProcsFudgeFactor; static BufferAllocator() { s_ProcsFudgeFactor = SystemInfo.GetNumProcessCPUs(); if (s_ProcsFudgeFactor < 1) s_ProcsFudgeFactor = 1; if (s_ProcsFudgeFactor > 4) s_ProcsFudgeFactor = 4; } internal BufferAllocator(int maxFree) { _buffers = new Stack(); _numFree = 0; _maxFree = maxFree * s_ProcsFudgeFactor; } internal /*public*/ Object GetBuffer() { Object buffer = null; if (_numFree > 0) { lock(this) { if (_numFree > 0) { buffer = _buffers.Pop(); _numFree--; } } } if (buffer == null) buffer = AllocBuffer(); return buffer; } internal void ReuseBuffer(Object buffer) { if (_numFree < _maxFree) { lock(this) { if (_numFree < _maxFree) { _buffers.Push(buffer); _numFree++; } } } } /* * To be implemented by a derived class */ abstract protected Object AllocBuffer(); } /* * Concrete allocator class for ubyte[] buffer recycling */ internal class UbyteBufferAllocator : BufferAllocator { private int _bufferSize; internal UbyteBufferAllocator(int bufferSize, int maxFree) : base(maxFree) { _bufferSize = bufferSize; } protected override Object AllocBuffer() { return new byte[_bufferSize]; } } /* * Concrete allocator class for char[] buffer recycling */ internal class CharBufferAllocator : BufferAllocator { private int _bufferSize; internal CharBufferAllocator(int bufferSize, int maxFree) : base(maxFree) { _bufferSize = bufferSize; } protected override Object AllocBuffer() { return new char[_bufferSize]; } } /* * Concrete allocator class for int[] buffer recycling */ internal class IntegerArrayAllocator : BufferAllocator { private int _arraySize; internal IntegerArrayAllocator(int arraySize, int maxFree) : base(maxFree) { _arraySize = arraySize; } protected override Object AllocBuffer() { return new int[_arraySize]; } } /* * Concrete allocator class for IntPtr[] buffer recycling */ internal class IntPtrArrayAllocator : BufferAllocator { private int _arraySize; internal IntPtrArrayAllocator(int arraySize, int maxFree) : base(maxFree) { _arraySize = arraySize; } protected override Object AllocBuffer() { return new IntPtr[_arraySize]; } } } // 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
- AsymmetricSignatureDeformatter.cs
- BufferedWebEventProvider.cs
- TripleDES.cs
- CaseExpr.cs
- StatementContext.cs
- DisableDpiAwarenessAttribute.cs
- BaseProcessor.cs
- InstanceOwnerQueryResult.cs
- NegatedCellConstant.cs
- ChildChangedEventArgs.cs
- DesignSurfaceServiceContainer.cs
- WindowsFont.cs
- ADMembershipProvider.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- WindowsSolidBrush.cs
- SqlConnection.cs
- LazyTextWriterCreator.cs
- StringInfo.cs
- SqlBulkCopyColumnMapping.cs
- AsyncOperationContext.cs
- Transform.cs
- ChildChangedEventArgs.cs
- ReverseInheritProperty.cs
- ChoiceConverter.cs
- DataListCommandEventArgs.cs
- EmptyEnumerable.cs
- BaseAppDomainProtocolHandler.cs
- ZoneButton.cs
- MsmqMessageProperty.cs
- ClientCredentialsElement.cs
- CodeArrayIndexerExpression.cs
- WorkflowServiceHost.cs
- LongSumAggregationOperator.cs
- RewritingProcessor.cs
- ConfigurationSectionCollection.cs
- NotifyCollectionChangedEventArgs.cs
- FrameworkReadOnlyPropertyMetadata.cs
- HandleRef.cs
- TraceContext.cs
- ProtocolsSection.cs
- FloaterBaseParagraph.cs
- UpdatableGenericsFeature.cs
- ItemContainerProviderWrapper.cs
- OutOfProcStateClientManager.cs
- Tokenizer.cs
- _HTTPDateParse.cs
- TimeSpanOrInfiniteConverter.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- ResourceDisplayNameAttribute.cs
- EdmRelationshipNavigationPropertyAttribute.cs
- GroupItemAutomationPeer.cs
- GenericPrincipal.cs
- LogExtent.cs
- StaticTextPointer.cs
- RowBinding.cs
- StringAttributeCollection.cs
- ColumnReorderedEventArgs.cs
- QilBinary.cs
- FunctionDetailsReader.cs
- WindowShowOrOpenTracker.cs
- HttpPostServerProtocol.cs
- SqlProviderManifest.cs
- ImpersonationOption.cs
- HttpModulesSection.cs
- AuthorizationRule.cs
- DefaultBindingPropertyAttribute.cs
- CircleHotSpot.cs
- smtpconnection.cs
- Cloud.cs
- InputGestureCollection.cs
- ApplicationDirectoryMembershipCondition.cs
- ExceptionUtil.cs
- EditCommandColumn.cs
- BindingManagerDataErrorEventArgs.cs
- SignatureConfirmationElement.cs
- DataPager.cs
- CompoundFileStorageReference.cs
- ReachDocumentPageSerializerAsync.cs
- SqlConnectionPoolProviderInfo.cs
- FrameworkPropertyMetadata.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- DbConvert.cs
- StringStorage.cs
- Processor.cs
- FontSourceCollection.cs
- DataGridViewDataErrorEventArgs.cs
- XPathEmptyIterator.cs
- MethodCallConverter.cs
- HierarchicalDataSourceControl.cs
- Size3DConverter.cs
- WizardPanelChangingEventArgs.cs
- DecimalConstantAttribute.cs
- Property.cs
- ProfileService.cs
- WrappedKeySecurityTokenParameters.cs
- TextBox.cs
- PageContentCollection.cs
- control.ime.cs
- ObjectMemberMapping.cs
- DataListCommandEventArgs.cs