Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / DEVDIV / depot / DevDiv / releases / whidbey / QFE / 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.
//------------------------------------------------------------------------------
//
// 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TreeBuilder.cs
- BinHexDecoder.cs
- ServiceEndpointAssociationProvider.cs
- EntityDataSourceDataSelectionPanel.designer.cs
- OracleBFile.cs
- DateTimeFormat.cs
- GZipStream.cs
- OracleTransaction.cs
- AutomationPeer.cs
- MultiView.cs
- NodeFunctions.cs
- AutoCompleteStringCollection.cs
- NavigationPropertySingletonExpression.cs
- TextMetrics.cs
- Propagator.JoinPropagator.JoinPredicateVisitor.cs
- basenumberconverter.cs
- ToolboxControl.cs
- SchemaManager.cs
- PropertyChangedEventManager.cs
- HybridObjectCache.cs
- SecurityRuntime.cs
- WorkflowFileItem.cs
- DecimalSumAggregationOperator.cs
- DesignerSerializationOptionsAttribute.cs
- RawKeyboardInputReport.cs
- ListMarkerLine.cs
- Query.cs
- Style.cs
- EventMappingSettingsCollection.cs
- StringFreezingAttribute.cs
- StrongNameIdentityPermission.cs
- TableCell.cs
- RegexWorker.cs
- SafeLocalMemHandle.cs
- KeyValuePairs.cs
- SafeEventLogReadHandle.cs
- ColorKeyFrameCollection.cs
- ReliableDuplexSessionChannel.cs
- XmlReader.cs
- FullTrustAssemblyCollection.cs
- isolationinterop.cs
- BrowserCapabilitiesFactory.cs
- RuntimeEnvironment.cs
- ProtocolElementCollection.cs
- ScrollEventArgs.cs
- DbModificationClause.cs
- BypassElementCollection.cs
- RecognitionResult.cs
- FunctionImportElement.cs
- RetrieveVirtualItemEventArgs.cs
- ExceptionUtil.cs
- GridViewRowPresenterBase.cs
- _SslStream.cs
- XPathParser.cs
- QuotedStringWriteStateInfo.cs
- WebPartDisplayModeCancelEventArgs.cs
- WebPartCloseVerb.cs
- ResourcePart.cs
- CodeMethodReturnStatement.cs
- ContentTextAutomationPeer.cs
- TaiwanCalendar.cs
- ValidationManager.cs
- TextBox.cs
- CircleHotSpot.cs
- DataGridViewRowHeightInfoPushedEventArgs.cs
- ResourceDisplayNameAttribute.cs
- ModuleConfigurationInfo.cs
- StackBuilderSink.cs
- TdsParserHelperClasses.cs
- ServicePerformanceCounters.cs
- DataGridViewCellEventArgs.cs
- HttpStreamFormatter.cs
- WithStatement.cs
- ButtonField.cs
- MobileControlBuilder.cs
- MemberInitExpression.cs
- QuaternionAnimation.cs
- BufferModeSettings.cs
- QueryContinueDragEvent.cs
- ReliableMessagingVersion.cs
- MultipartIdentifier.cs
- Compiler.cs
- DESCryptoServiceProvider.cs
- precedingquery.cs
- SinglePageViewer.cs
- TranslateTransform3D.cs
- PropertyEntry.cs
- InfoCardSymmetricAlgorithm.cs
- SqlClientWrapperSmiStreamChars.cs
- ContentPlaceHolderDesigner.cs
- Quaternion.cs
- Comparer.cs
- XmlAttributeOverrides.cs
- WindowsSlider.cs
- shaper.cs
- PropertyChangingEventArgs.cs
- DeleteMemberBinder.cs
- NameTable.cs
- PageThemeCodeDomTreeGenerator.cs
- SpotLight.cs