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
- Literal.cs
- _SingleItemRequestCache.cs
- DbUpdateCommandTree.cs
- IItemContainerGenerator.cs
- EdmToObjectNamespaceMap.cs
- HttpBindingExtension.cs
- ConfigurationSettings.cs
- AutoGeneratedField.cs
- ClientRolePrincipal.cs
- WebBrowserSiteBase.cs
- WindowsSysHeader.cs
- ReadWriteObjectLock.cs
- ContourSegment.cs
- Point3DKeyFrameCollection.cs
- ObjectStateManagerMetadata.cs
- ReadOnlyHierarchicalDataSource.cs
- ConfigurationCollectionAttribute.cs
- DBConcurrencyException.cs
- FrameworkTextComposition.cs
- StringAnimationUsingKeyFrames.cs
- ProcessProtocolHandler.cs
- DataTableReader.cs
- Utilities.cs
- SqlCacheDependencySection.cs
- TransformerInfoCollection.cs
- AppDomainAttributes.cs
- ObjectStorage.cs
- Vector3D.cs
- TPLETWProvider.cs
- ControlPaint.cs
- StylusSystemGestureEventArgs.cs
- MappedMetaModel.cs
- HttpNamespaceReservationInstallComponent.cs
- PropertyDescriptorCollection.cs
- UnsupportedPolicyOptionsException.cs
- RewritingProcessor.cs
- MutexSecurity.cs
- TemplateControl.cs
- Tokenizer.cs
- DynamicEntity.cs
- SettingsContext.cs
- OperationFormatUse.cs
- _BasicClient.cs
- DefaultShape.cs
- Environment.cs
- WorkflowServiceHostFactory.cs
- ColorTranslator.cs
- LineServices.cs
- DefaultAssemblyResolver.cs
- HtmlInputSubmit.cs
- PrincipalPermission.cs
- SingleSelectRootGridEntry.cs
- TableLayoutPanelDesigner.cs
- EmissiveMaterial.cs
- TdsParserStateObject.cs
- PageParserFilter.cs
- HashMembershipCondition.cs
- WebServiceClientProxyGenerator.cs
- BadImageFormatException.cs
- DeobfuscatingStream.cs
- ItemCheckedEvent.cs
- Opcode.cs
- GridErrorDlg.cs
- BinaryWriter.cs
- metadatamappinghashervisitor.hashsourcebuilder.cs
- Normalizer.cs
- InputBuffer.cs
- ResXResourceReader.cs
- TreeWalkHelper.cs
- TextTreeUndoUnit.cs
- TraceInternal.cs
- FixedSOMSemanticBox.cs
- Transform.cs
- CalendarDataBindingHandler.cs
- SuppressMergeCheckAttribute.cs
- CursorConverter.cs
- CurrencyManager.cs
- ItemType.cs
- OutOfMemoryException.cs
- PathStreamGeometryContext.cs
- RotateTransform3D.cs
- ActiveXContainer.cs
- ToolStripGripRenderEventArgs.cs
- ClientFormsIdentity.cs
- MemberRelationshipService.cs
- X509CertificateValidator.cs
- SegmentTree.cs
- ContextMenu.cs
- HtmlForm.cs
- TextTrailingCharacterEllipsis.cs
- ExceptQueryOperator.cs
- Activity.cs
- SafeEventLogWriteHandle.cs
- ListControlConvertEventArgs.cs
- TimeSpanValidator.cs
- Triangle.cs
- LogStore.cs
- SqlDataReader.cs
- BlockCollection.cs
- MobileControl.cs