Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- BindingContext.cs
- CqlParser.cs
- DBConcurrencyException.cs
- Matrix3DValueSerializer.cs
- GenericPrincipal.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- MimeWriter.cs
- httpstaticobjectscollection.cs
- WindowsTab.cs
- WebBrowserContainer.cs
- MetadataArtifactLoader.cs
- InputElement.cs
- XmlSchemaInfo.cs
- SerializationAttributes.cs
- StrokeSerializer.cs
- DependencyPropertyAttribute.cs
- DataControlReferenceCollection.cs
- SoapProtocolImporter.cs
- ReaderWriterLock.cs
- DataGridViewCellCollection.cs
- ProfilePropertySettings.cs
- BitmapImage.cs
- ByteAnimationUsingKeyFrames.cs
- ChangePassword.cs
- StringSource.cs
- AppLevelCompilationSectionCache.cs
- UrlAuthFailedErrorFormatter.cs
- ContentElementAutomationPeer.cs
- RootBrowserWindowProxy.cs
- StylusCaptureWithinProperty.cs
- ServiceOperationDetailViewControl.cs
- PrivacyNoticeBindingElementImporter.cs
- HostProtectionPermission.cs
- RangeValidator.cs
- KeyMatchBuilder.cs
- WizardDesigner.cs
- ContextMenuService.cs
- SafePipeHandle.cs
- QilBinary.cs
- DataGridTextColumn.cs
- XmlSequenceWriter.cs
- ConstraintConverter.cs
- XmlSchemaChoice.cs
- RegionIterator.cs
- SessionSwitchEventArgs.cs
- ServiceDescriptionImporter.cs
- LayoutEngine.cs
- Metafile.cs
- HttpDictionary.cs
- FullTextLine.cs
- Border.cs
- NullableDecimalAverageAggregationOperator.cs
- ImageListImage.cs
- CollectionEditor.cs
- PrintEvent.cs
- PrinterResolution.cs
- DesignerSerializationOptionsAttribute.cs
- SQLBytesStorage.cs
- IntellisenseTextBox.cs
- EntityDataSourceContainerNameConverter.cs
- WindowsComboBox.cs
- Signature.cs
- IntegrationExceptionEventArgs.cs
- ObjectListDesigner.cs
- TableLayoutColumnStyleCollection.cs
- HtmlTableCellCollection.cs
- DataBoundControlAdapter.cs
- ReferencedType.cs
- BinaryExpression.cs
- GregorianCalendarHelper.cs
- OpacityConverter.cs
- CellConstantDomain.cs
- XsltArgumentList.cs
- InvalidAsynchronousStateException.cs
- _FtpDataStream.cs
- DataGrid.cs
- Lasso.cs
- NTAccount.cs
- EditorServiceContext.cs
- QilNode.cs
- ManipulationPivot.cs
- ConvertTextFrag.cs
- ButtonBaseAdapter.cs
- EpmSourceTree.cs
- Message.cs
- SerializableAttribute.cs
- CheckBoxBaseAdapter.cs
- CodeVariableDeclarationStatement.cs
- CodeAttachEventStatement.cs
- MorphHelpers.cs
- ExchangeUtilities.cs
- EntityDataSourceWizardForm.cs
- HttpWrapper.cs
- SchemaContext.cs
- ConfigurationValues.cs
- Point4D.cs
- ImpersonationContext.cs
- EmptyArray.cs
- WebAdminConfigurationHelper.cs
- Drawing.cs