Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / xsp / System / Web / BufferAllocator.cs / 1 / 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
- HostExecutionContextManager.cs
- X509CertificateTokenFactoryCredential.cs
- ExtensibleClassFactory.cs
- SessionSwitchEventArgs.cs
- ParseElement.cs
- BaseHashHelper.cs
- StateMachine.cs
- ClientBuildManager.cs
- _ListenerResponseStream.cs
- InfoCardSymmetricAlgorithm.cs
- PropertyChangedEventArgs.cs
- EntityConnectionStringBuilder.cs
- ObjectCacheSettings.cs
- SymbolType.cs
- WebPartUtil.cs
- WhitespaceRuleLookup.cs
- TabItemWrapperAutomationPeer.cs
- SrgsSemanticInterpretationTag.cs
- XmlNamespaceManager.cs
- XamlClipboardData.cs
- ValidationRuleCollection.cs
- MissingFieldException.cs
- Int32Storage.cs
- GridViewUpdatedEventArgs.cs
- CodeBinaryOperatorExpression.cs
- PersonalizableTypeEntry.cs
- UpdatePanelTrigger.cs
- Expressions.cs
- ExpandCollapsePattern.cs
- activationcontext.cs
- ZipQueryOperator.cs
- Pair.cs
- ControlBindingsConverter.cs
- SortQuery.cs
- ColorPalette.cs
- TextParagraphProperties.cs
- PasswordRecovery.cs
- HttpApplicationStateWrapper.cs
- DataGridViewRow.cs
- WmfPlaceableFileHeader.cs
- RSAPKCS1SignatureFormatter.cs
- DataGridCellInfo.cs
- DocumentViewerConstants.cs
- WebRequestModulesSection.cs
- DataGridViewImageColumn.cs
- InheritablePropertyChangeInfo.cs
- IPAddress.cs
- WebScriptEnablingElement.cs
- RSATokenProvider.cs
- AsyncResult.cs
- HtmlForm.cs
- TypeReference.cs
- InstanceOwnerException.cs
- CodeStatementCollection.cs
- XmlElementList.cs
- ProcessModule.cs
- BinHexDecoder.cs
- ToolBarTray.cs
- ChannelManager.cs
- COM2Properties.cs
- XsltFunctions.cs
- Set.cs
- SystemResources.cs
- TypeListConverter.cs
- DeviceContexts.cs
- HttpModuleAction.cs
- _ScatterGatherBuffers.cs
- AncestorChangedEventArgs.cs
- HttpContext.cs
- Pen.cs
- IImplicitResourceProvider.cs
- SettingsPropertyValueCollection.cs
- WebServiceMethodData.cs
- Literal.cs
- ToolStripRenderEventArgs.cs
- PointCollectionConverter.cs
- DbConvert.cs
- BeginEvent.cs
- GenericWebPart.cs
- SynchronizedChannelCollection.cs
- XsltFunctions.cs
- AssemblyCache.cs
- SecurityKeyIdentifier.cs
- ContentControl.cs
- PartManifestEntry.cs
- WebPartEditorApplyVerb.cs
- TableRow.cs
- DbConnectionPoolIdentity.cs
- CommandPlan.cs
- StylusLogic.cs
- StandardCommands.cs
- CollectionChangedEventManager.cs
- DataBoundLiteralControl.cs
- OleDbSchemaGuid.cs
- BoolExpr.cs
- UnknownBitmapEncoder.cs
- StorageEntitySetMapping.cs
- _AutoWebProxyScriptWrapper.cs
- PriorityItem.cs
- OneToOneMappingSerializer.cs