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
- AssemblyBuilderData.cs
- AtomMaterializer.cs
- MatcherBuilder.cs
- RichTextBox.cs
- WindowsFormsSectionHandler.cs
- ExtensionDataReader.cs
- TableLayoutSettingsTypeConverter.cs
- ProfileModule.cs
- MailWebEventProvider.cs
- ClientUriBehavior.cs
- PersonalizationProvider.cs
- WinFormsSpinner.cs
- Line.cs
- ToolStripGripRenderEventArgs.cs
- UserPersonalizationStateInfo.cs
- TreeViewItem.cs
- BufferedGenericXmlSecurityToken.cs
- Signature.cs
- _SecureChannel.cs
- LayoutEvent.cs
- SrgsToken.cs
- DynamicValueConverter.cs
- CodeAssignStatement.cs
- FormClosingEvent.cs
- RayMeshGeometry3DHitTestResult.cs
- ArgumentOutOfRangeException.cs
- OTFRasterizer.cs
- XmlProcessingInstruction.cs
- QilInvoke.cs
- DictionaryBase.cs
- RequestCachePolicy.cs
- JournalEntryStack.cs
- EmptyEnumerator.cs
- XmlDocument.cs
- MultiSelectRootGridEntry.cs
- Queue.cs
- EditorZoneBase.cs
- RoutedEventArgs.cs
- ScalarConstant.cs
- AssemblyAttributesGoHere.cs
- AuthenticationServiceManager.cs
- WebPartUtil.cs
- NonBatchDirectoryCompiler.cs
- XmlAnyElementAttribute.cs
- SqlClientWrapperSmiStream.cs
- MenuItemBindingCollection.cs
- FileDialog.cs
- Accessible.cs
- ShaperBuffers.cs
- ClientTargetSection.cs
- BufferBuilder.cs
- FileDialogCustomPlacesCollection.cs
- FilterQuery.cs
- TableLayoutCellPaintEventArgs.cs
- HtmlElement.cs
- ResourceAttributes.cs
- ValidationPropertyAttribute.cs
- MultipartContentParser.cs
- XmlAttributeAttribute.cs
- CollectionContainer.cs
- TraceData.cs
- Part.cs
- FilteredReadOnlyMetadataCollection.cs
- DataGridViewAdvancedBorderStyle.cs
- Material.cs
- WebPartConnectionsCancelVerb.cs
- HttpTransportElement.cs
- LayoutTableCell.cs
- DataGridItemCollection.cs
- CompilerErrorCollection.cs
- StringPropertyBuilder.cs
- AnnotationAdorner.cs
- XmlTextReaderImplHelpers.cs
- QuarticEase.cs
- EpmContentSerializerBase.cs
- ComboBoxDesigner.cs
- EntityModelBuildProvider.cs
- PrefixQName.cs
- ComboBox.cs
- WithParamAction.cs
- ArrayConverter.cs
- DBConnection.cs
- ListDictionaryInternal.cs
- EmissiveMaterial.cs
- COAUTHINFO.cs
- Pair.cs
- Propagator.ExtentPlaceholderCreator.cs
- GenericNameHandler.cs
- IERequestCache.cs
- MSAAEventDispatcher.cs
- BlurBitmapEffect.cs
- LogArchiveSnapshot.cs
- SemanticBasicElement.cs
- SqlDataAdapter.cs
- HintTextConverter.cs
- InterleavedZipPartStream.cs
- PropertyReference.cs
- Attributes.cs
- ErasingStroke.cs
- Parser.cs