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
- ClientTargetSection.cs
- AssemblyUtil.cs
- AffineTransform3D.cs
- ProvideValueServiceProvider.cs
- ObfuscateAssemblyAttribute.cs
- Timer.cs
- XmlLoader.cs
- ZoomPercentageConverter.cs
- ServiceOperationViewControl.cs
- UrlMappingCollection.cs
- DetailsViewDeleteEventArgs.cs
- ServiceModelConfigurationElementCollection.cs
- LinearGradientBrush.cs
- PriorityItem.cs
- IncrementalCompileAnalyzer.cs
- WhereQueryOperator.cs
- TableSectionStyle.cs
- MiniParameterInfo.cs
- ExecutionPropertyManager.cs
- listitem.cs
- LinearGradientBrush.cs
- SettingsContext.cs
- LinqDataSourceSelectEventArgs.cs
- MaskedTextBoxTextEditor.cs
- PagerSettings.cs
- AssociationType.cs
- HuffCodec.cs
- XmlNullResolver.cs
- ExceptionWrapper.cs
- Span.cs
- elementinformation.cs
- Int64Animation.cs
- RuleSetCollection.cs
- ByteStream.cs
- TreeView.cs
- RegexGroupCollection.cs
- CryptoConfig.cs
- WebSysDefaultValueAttribute.cs
- SettingsAttributes.cs
- TypefaceMap.cs
- PreservationFileReader.cs
- CounterNameConverter.cs
- Resources.Designer.cs
- ZipFileInfoCollection.cs
- CompatibleComparer.cs
- ThousandthOfEmRealPoints.cs
- StaticExtension.cs
- CodeSnippetTypeMember.cs
- ValidatorCollection.cs
- PersonalizationEntry.cs
- ProcessHostConfigUtils.cs
- AccessDataSourceView.cs
- ColumnMap.cs
- Pointer.cs
- GradientBrush.cs
- ListViewUpdateEventArgs.cs
- DataBoundControl.cs
- DecoratedNameAttribute.cs
- AssociatedControlConverter.cs
- ConfigXmlText.cs
- MergePropertyDescriptor.cs
- DataGridViewCellStyleContentChangedEventArgs.cs
- EventlogProvider.cs
- DisplayInformation.cs
- VisualBrush.cs
- WebBrowserProgressChangedEventHandler.cs
- ImageKeyConverter.cs
- DataSet.cs
- HelpInfo.cs
- TextEmbeddedObject.cs
- WS2007HttpBindingCollectionElement.cs
- DataSourceXmlAttributeAttribute.cs
- HierarchicalDataBoundControl.cs
- securitycriticaldata.cs
- QueryComponents.cs
- XmlUnspecifiedAttribute.cs
- ScaleTransform.cs
- XPathSingletonIterator.cs
- SectionVisual.cs
- SignedXml.cs
- DBCSCodePageEncoding.cs
- Pkcs9Attribute.cs
- HandlerFactoryWrapper.cs
- UpdateManifestForBrowserApplication.cs
- StringUtil.cs
- CrossContextChannel.cs
- CallbackTimeoutsBehavior.cs
- Point3DAnimationUsingKeyFrames.cs
- CollectionDataContract.cs
- RenameRuleObjectDialog.Designer.cs
- JoinElimination.cs
- XamlFilter.cs
- BindingContext.cs
- CompressStream.cs
- WorkflowDefinitionDispenser.cs
- ErrorFormatter.cs
- CompressEmulationStream.cs
- ValidationPropertyAttribute.cs
- XPathDocumentNavigator.cs
- DataGridViewButtonColumn.cs