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
- HeaderedContentControl.cs
- ListenerChannelContext.cs
- GetCertificateRequest.cs
- DirectoryObjectSecurity.cs
- OrderedDictionary.cs
- SevenBitStream.cs
- KnownBoxes.cs
- DictionaryManager.cs
- DialogResultConverter.cs
- ConfigurationManagerHelperFactory.cs
- DataKeyPropertyAttribute.cs
- QueryLifecycle.cs
- QilGeneratorEnv.cs
- ComponentSerializationService.cs
- DrawingContextWalker.cs
- PersonalizationStateInfo.cs
- PipelineModuleStepContainer.cs
- EdmEntityTypeAttribute.cs
- IgnoreFlushAndCloseStream.cs
- SynchronizingStream.cs
- CodeStatementCollection.cs
- NonDualMessageSecurityOverHttp.cs
- HiddenField.cs
- TextWriterTraceListener.cs
- XamlParser.cs
- MonthChangedEventArgs.cs
- OlePropertyStructs.cs
- TreeBuilderXamlTranslator.cs
- IPEndPoint.cs
- TransformConverter.cs
- TrustManagerMoreInformation.cs
- EventSinkHelperWriter.cs
- CfgArc.cs
- StylusSystemGestureEventArgs.cs
- SecurityElement.cs
- Attribute.cs
- LineProperties.cs
- XpsResourceDictionary.cs
- XslTransform.cs
- SingletonConnectionReader.cs
- NameValuePermission.cs
- DataServiceResponse.cs
- SessionStateSection.cs
- WebServiceReceive.cs
- TransformGroup.cs
- SchemaImporterExtensionsSection.cs
- _TLSstream.cs
- DbConnectionClosed.cs
- EditorOptionAttribute.cs
- Material.cs
- RelatedCurrencyManager.cs
- SvcMapFileLoader.cs
- URLIdentityPermission.cs
- ProgressPage.cs
- SizeLimitedCache.cs
- DesignerSerializationOptionsAttribute.cs
- mda.cs
- Suspend.cs
- GroupQuery.cs
- AbstractSvcMapFileLoader.cs
- StandardToolWindows.cs
- GenericAuthenticationEventArgs.cs
- WorkflowIdleBehavior.cs
- MultiTrigger.cs
- MouseButtonEventArgs.cs
- ReturnType.cs
- XmlHierarchicalEnumerable.cs
- ClientOptions.cs
- ChangeDirector.cs
- DynamicPhysicalDiscoSearcher.cs
- InputDevice.cs
- ApplyImportsAction.cs
- EncryptedType.cs
- ScalarType.cs
- SocketPermission.cs
- HostingEnvironment.cs
- SqlBooleanizer.cs
- ImageAnimator.cs
- DiagnosticsConfigurationHandler.cs
- HttpClientProtocol.cs
- thaishape.cs
- EntityContainer.cs
- EdmComplexTypeAttribute.cs
- CodeSnippetExpression.cs
- UserControlParser.cs
- DataTableClearEvent.cs
- RegexWriter.cs
- OracleConnectionString.cs
- OutputCacheSettings.cs
- ToolStripRenderer.cs
- Math.cs
- FileVersion.cs
- Model3DGroup.cs
- DistributedTransactionPermission.cs
- AsyncResult.cs
- ListItemsCollectionEditor.cs
- MonitoringDescriptionAttribute.cs
- unsafeIndexingFilterStream.cs
- ListView.cs
- ExternalFile.cs