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
- PerspectiveCamera.cs
- EntityContainerEmitter.cs
- SortDescription.cs
- StaticSiteMapProvider.cs
- FieldBuilder.cs
- DiagnosticTraceSource.cs
- Animatable.cs
- SurrogateEncoder.cs
- StringReader.cs
- SafeWaitHandle.cs
- InstanceStoreQueryResult.cs
- Point4D.cs
- ListViewInsertEventArgs.cs
- EventManager.cs
- XmlCDATASection.cs
- Int32AnimationUsingKeyFrames.cs
- AttributeCollection.cs
- Parser.cs
- TypeReference.cs
- HMACSHA1.cs
- JsonFormatReaderGenerator.cs
- XPathAncestorQuery.cs
- StringDictionary.cs
- XmlSchemaResource.cs
- SafeBitVector32.cs
- HttpInputStream.cs
- ICollection.cs
- InfiniteIntConverter.cs
- TabControl.cs
- StateManagedCollection.cs
- EllipseGeometry.cs
- QueryCacheKey.cs
- TextWriterTraceListener.cs
- ParagraphVisual.cs
- QuerySafeNavigator.cs
- ProjectionCamera.cs
- RecognizeCompletedEventArgs.cs
- _FixedSizeReader.cs
- Utility.cs
- BulletChrome.cs
- DataSourceNameHandler.cs
- PaintEvent.cs
- ComponentEditorPage.cs
- UntypedNullExpression.cs
- mactripleDES.cs
- XmlSecureResolver.cs
- XmlCodeExporter.cs
- DateTimeParse.cs
- X509Utils.cs
- StructuralCache.cs
- OdbcCommandBuilder.cs
- StringSource.cs
- Brush.cs
- SchemaTableOptionalColumn.cs
- CodeNamespaceImportCollection.cs
- HttpHandler.cs
- EmptyEnumerator.cs
- ListItem.cs
- CssStyleCollection.cs
- ClientCredentialsElement.cs
- XmlTextAttribute.cs
- ClrProviderManifest.cs
- MsmqIntegrationOutputChannel.cs
- XsltContext.cs
- OperationContractAttribute.cs
- StringFormat.cs
- LinqDataSourceDeleteEventArgs.cs
- ModelMemberCollection.cs
- recordstate.cs
- HtmlButton.cs
- TransactionFlowOption.cs
- SystemThemeKey.cs
- CodeArrayCreateExpression.cs
- StylusButtonEventArgs.cs
- Vector3D.cs
- ViewCellRelation.cs
- EventMap.cs
- BitStack.cs
- SmtpException.cs
- TargetControlTypeCache.cs
- _UncName.cs
- AmbientLight.cs
- MatrixCamera.cs
- HyperlinkAutomationPeer.cs
- ServiceDescriptionData.cs
- XmlSchemaObjectTable.cs
- TypographyProperties.cs
- WebPartConnectionsConnectVerb.cs
- GenericQueueSurrogate.cs
- COM2ComponentEditor.cs
- GenericWebPart.cs
- ProgressBar.cs
- VScrollProperties.cs
- MsmqBindingElementBase.cs
- PeerContact.cs
- BitConverter.cs
- CodeEventReferenceExpression.cs
- Events.cs
- EncoderNLS.cs
- SmiConnection.cs