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
- OwnerDrawPropertyBag.cs
- CatalogZone.cs
- Queue.cs
- RedBlackList.cs
- DataGridViewSelectedCellCollection.cs
- UnitControl.cs
- BitmapImage.cs
- QilReplaceVisitor.cs
- X509Chain.cs
- SystemGatewayIPAddressInformation.cs
- UnsupportedPolicyOptionsException.cs
- BufferedOutputStream.cs
- PixelShader.cs
- ServiceModelDictionary.cs
- CertificateReferenceElement.cs
- WindowsBrush.cs
- RoutedEventConverter.cs
- SmtpMail.cs
- ListViewDeleteEventArgs.cs
- TableItemStyle.cs
- sqlcontext.cs
- WorkflowIdleBehavior.cs
- GeometryGroup.cs
- PropertyDescriptorComparer.cs
- EventBookmark.cs
- ScriptReferenceBase.cs
- UrlUtility.cs
- MultiDataTrigger.cs
- FixedBufferAttribute.cs
- WebPartConnectionsCancelEventArgs.cs
- TableRow.cs
- ConfigXmlElement.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- DynamicRenderer.cs
- ComNativeDescriptor.cs
- XLinq.cs
- QueryOutputWriter.cs
- HtmlInputReset.cs
- FieldTemplateUserControl.cs
- DictionaryChange.cs
- InvalidComObjectException.cs
- OverflowException.cs
- PageParserFilter.cs
- RemoveStoryboard.cs
- HttpServerUtilityWrapper.cs
- SharedTcpTransportManager.cs
- ScriptResourceDefinition.cs
- SqlProfileProvider.cs
- Link.cs
- Root.cs
- EventlogProvider.cs
- SafeNativeMethods.cs
- ColorContext.cs
- RightsManagementEncryptedStream.cs
- KeyedCollection.cs
- Assert.cs
- QilExpression.cs
- MatrixTransform3D.cs
- RichTextBoxContextMenu.cs
- ConditionalExpression.cs
- Object.cs
- DataGridViewRowPrePaintEventArgs.cs
- SocketAddress.cs
- FlowPosition.cs
- DomainUpDown.cs
- PatternMatcher.cs
- HostingEnvironmentWrapper.cs
- MemberJoinTreeNode.cs
- ScrollEvent.cs
- TextRangeEdit.cs
- WindowsGrip.cs
- ConnectionProviderAttribute.cs
- DataGridViewImageCell.cs
- DesignerValidationSummaryAdapter.cs
- MetadataPropertyvalue.cs
- AppDomain.cs
- DataSourceProvider.cs
- SiteMapPath.cs
- OleDbCommandBuilder.cs
- DecoderFallback.cs
- WpfMemberInvoker.cs
- ExternalFile.cs
- BitVec.cs
- DbProviderFactoriesConfigurationHandler.cs
- ReflectionUtil.cs
- ResourceAttributes.cs
- XmlTextReaderImplHelpers.cs
- mediaeventargs.cs
- TextMarkerSource.cs
- WorkflowInstanceExtensionCollection.cs
- Geometry.cs
- VariantWrapper.cs
- UpdateProgress.cs
- BuiltInPermissionSets.cs
- Vector3DAnimationUsingKeyFrames.cs
- ExtensionQuery.cs
- LicenseContext.cs
- FrameworkContentElement.cs
- CheckedListBox.cs
- DateTimePickerDesigner.cs