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
- DelayDesigner.cs
- StateFinalizationActivity.cs
- GcSettings.cs
- SignatureDescription.cs
- LocatorGroup.cs
- Empty.cs
- SHA1CryptoServiceProvider.cs
- ServiceModelSecurityTokenRequirement.cs
- DocumentPaginator.cs
- ProfileManager.cs
- XmlDataDocument.cs
- AutomationFocusChangedEventArgs.cs
- WpfMemberInvoker.cs
- MetadataArtifactLoaderCompositeFile.cs
- MimeTypePropertyAttribute.cs
- DateTimeFormatInfo.cs
- LiteralLink.cs
- CreateUserWizard.cs
- SynchronizedDispatch.cs
- QueryAccessibilityHelpEvent.cs
- File.cs
- datacache.cs
- HttpDictionary.cs
- DataRelationPropertyDescriptor.cs
- BinaryFormatterWriter.cs
- Encoder.cs
- ComPlusInstanceProvider.cs
- DurableInstancingOptions.cs
- AdapterUtil.cs
- FlowNode.cs
- HtmlInputRadioButton.cs
- ResourceAttributes.cs
- PageTheme.cs
- InvalidDataException.cs
- BuilderPropertyEntry.cs
- HttpConfigurationContext.cs
- MSG.cs
- Activity.cs
- FilterQueryOptionExpression.cs
- SqlRowUpdatingEvent.cs
- ImageKeyConverter.cs
- SequentialUshortCollection.cs
- XmlNamespaceMappingCollection.cs
- HttpGetServerProtocol.cs
- ThreadAbortException.cs
- SynchronizedDispatch.cs
- CellQuery.cs
- printdlgexmarshaler.cs
- DictionarySectionHandler.cs
- SafeCoTaskMem.cs
- ExtractedStateEntry.cs
- DataServiceException.cs
- MenuItemStyle.cs
- CorePropertiesFilter.cs
- ContentElement.cs
- VSDExceptions.cs
- DoubleMinMaxAggregationOperator.cs
- ListItemCollection.cs
- TableRowCollection.cs
- InstancePersistenceCommand.cs
- ButtonAutomationPeer.cs
- WinEventHandler.cs
- ChildrenQuery.cs
- MouseActionValueSerializer.cs
- PtsPage.cs
- UdpRetransmissionSettings.cs
- DataColumnPropertyDescriptor.cs
- SqlConnection.cs
- Padding.cs
- ObjectSet.cs
- __ComObject.cs
- EntityViewGenerator.cs
- Light.cs
- XmlDomTextWriter.cs
- Closure.cs
- mil_sdk_version.cs
- DataColumn.cs
- ServiceModelConfigurationSectionCollection.cs
- EntityDataSourceMemberPath.cs
- QueryableDataSourceHelper.cs
- WaitHandle.cs
- GeometryValueSerializer.cs
- ButtonDesigner.cs
- SortedDictionary.cs
- XmlNodeWriter.cs
- TargetException.cs
- LinearGradientBrush.cs
- Executor.cs
- NonVisualControlAttribute.cs
- SequenceDesigner.cs
- XmlNamespaceDeclarationsAttribute.cs
- FileLogRecordHeader.cs
- IBuiltInEvidence.cs
- ObjectSecurity.cs
- LineServicesRun.cs
- Rotation3DKeyFrameCollection.cs
- MetabaseServerConfig.cs
- AttributeExtensions.cs
- ObjectSet.cs
- BitmapPalette.cs