Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / 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];
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RemotingServices.cs
- OperationAbortedException.cs
- SplitterPanel.cs
- XhtmlConformanceSection.cs
- EncoderReplacementFallback.cs
- PointLightBase.cs
- DocumentGridContextMenu.cs
- GridItemCollection.cs
- CacheEntry.cs
- XsdBuilder.cs
- XmlSiteMapProvider.cs
- Base64Decoder.cs
- TemplateAction.cs
- WindowAutomationPeer.cs
- Stack.cs
- FontCacheUtil.cs
- FormViewModeEventArgs.cs
- WindowInteropHelper.cs
- ConfigurationValues.cs
- GlobalItem.cs
- __Filters.cs
- ClientProxyGenerator.cs
- Compiler.cs
- QilTypeChecker.cs
- SamlDoNotCacheCondition.cs
- IconConverter.cs
- NativeObjectSecurity.cs
- DataGridViewRowCollection.cs
- VisualBasicExpressionConverter.cs
- EntityParameter.cs
- DocumentXmlWriter.cs
- SimpleLine.cs
- DataServiceRequestException.cs
- BevelBitmapEffect.cs
- CustomUserNameSecurityTokenAuthenticator.cs
- UriParserTemplates.cs
- TabPage.cs
- XmlSchemaComplexContentExtension.cs
- BoundField.cs
- Stack.cs
- ObjectView.cs
- HttpVersion.cs
- AnnotationResource.cs
- MapPathBasedVirtualPathProvider.cs
- GroupByQueryOperator.cs
- SHA512.cs
- RadioButtonBaseAdapter.cs
- CodeBlockBuilder.cs
- SettingsBindableAttribute.cs
- ListItemCollection.cs
- XslTransform.cs
- ButtonRenderer.cs
- DeriveBytes.cs
- RuntimeWrappedException.cs
- BrowserCapabilitiesCodeGenerator.cs
- ListView.cs
- Cell.cs
- SerializationException.cs
- CodeCompileUnit.cs
- TypeEnumerableViewSchema.cs
- File.cs
- CodeThrowExceptionStatement.cs
- UIntPtr.cs
- AbstractDataSvcMapFileLoader.cs
- SelectedGridItemChangedEvent.cs
- ChangeDirector.cs
- DatagridviewDisplayedBandsData.cs
- _emptywebproxy.cs
- TraceContext.cs
- DataColumnChangeEvent.cs
- xdrvalidator.cs
- DBParameter.cs
- HandlerBase.cs
- AvTraceFormat.cs
- Mapping.cs
- ToolStripLabel.cs
- CallbackDebugElement.cs
- EditorZoneBase.cs
- DataObjectCopyingEventArgs.cs
- AmbientProperties.cs
- EntityDataSourceUtil.cs
- _SpnDictionary.cs
- AspCompat.cs
- DataKey.cs
- Bezier.cs
- DesignerTransactionCloseEvent.cs
- SevenBitStream.cs
- EntityProviderServices.cs
- FlowDocumentReader.cs
- EmptyEnumerable.cs
- SpecialNameAttribute.cs
- HtmlTableRowCollection.cs
- Vector3DAnimationBase.cs
- DataException.cs
- UTF8Encoding.cs
- DecimalConstantAttribute.cs
- Rotation3DKeyFrameCollection.cs
- MsdtcWrapper.cs
- EastAsianLunisolarCalendar.cs
- ACE.cs