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
- HostedTcpTransportManager.cs
- CalendarTable.cs
- Size.cs
- DataStreamFromComStream.cs
- Rule.cs
- ImageList.cs
- MergeLocalizationDirectives.cs
- XmlSchemaGroupRef.cs
- ValueSerializerAttribute.cs
- ConstantExpression.cs
- TypeConverterValueSerializer.cs
- HyperLinkField.cs
- SyntaxCheck.cs
- JsonSerializer.cs
- DtcInterfaces.cs
- FontDriver.cs
- ConfigurationSettings.cs
- TextServicesCompartment.cs
- BasicCellRelation.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- ResourceIDHelper.cs
- CustomCategoryAttribute.cs
- SettingsBindableAttribute.cs
- Single.cs
- HtmlInputReset.cs
- GlobalizationSection.cs
- TextProviderWrapper.cs
- TextBox.cs
- ServiceMetadataBehavior.cs
- PrincipalPermission.cs
- mda.cs
- SmtpNtlmAuthenticationModule.cs
- ToolStripMenuItem.cs
- PresentationSource.cs
- _FtpControlStream.cs
- ButtonFieldBase.cs
- LateBoundBitmapDecoder.cs
- DataContractSerializerMessageContractImporter.cs
- elementinformation.cs
- LayoutDump.cs
- CFStream.cs
- Substitution.cs
- PartialTrustHelpers.cs
- HtmlForm.cs
- PropertyInformation.cs
- SoapSchemaMember.cs
- DescendentsWalkerBase.cs
- CryptoConfig.cs
- MenuItemBinding.cs
- SessionStateContainer.cs
- indexingfiltermarshaler.cs
- ToolStripGrip.cs
- CacheMemory.cs
- DataControlField.cs
- MessageLoggingElement.cs
- InputReportEventArgs.cs
- CacheMemory.cs
- AndCondition.cs
- NullReferenceException.cs
- sqlcontext.cs
- ToolStripPanel.cs
- altserialization.cs
- Attachment.cs
- WorkflowServiceHostFactory.cs
- MappingSource.cs
- ObjectDisposedException.cs
- EncoderReplacementFallback.cs
- _Semaphore.cs
- CaretElement.cs
- XDeferredAxisSource.cs
- SemaphoreFullException.cs
- DataRelation.cs
- CustomAssemblyResolver.cs
- OdbcRowUpdatingEvent.cs
- TimerEventSubscriptionCollection.cs
- TreeIterator.cs
- SimpleFieldTemplateFactory.cs
- CodeExpressionCollection.cs
- XmlTextWriter.cs
- UICuesEvent.cs
- formatter.cs
- FixedElement.cs
- MenuItemBinding.cs
- Vars.cs
- Message.cs
- TempFiles.cs
- WebControlsSection.cs
- WebEventCodes.cs
- PropertyFilterAttribute.cs
- MultiDataTrigger.cs
- BoundColumn.cs
- XmlReaderSettings.cs
- SchemaManager.cs
- BitmapEffectInput.cs
- TokenBasedSetEnumerator.cs
- HtmlListAdapter.cs
- FormattedText.cs
- DoubleCollectionConverter.cs
- MetadataUtil.cs
- SelectionItemPattern.cs