Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / 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]; } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SoapAttributeAttribute.cs
- CheckBoxField.cs
- SettingsProperty.cs
- BooleanToVisibilityConverter.cs
- SettingsPropertyIsReadOnlyException.cs
- DataGridViewEditingControlShowingEventArgs.cs
- DateTimeConstantAttribute.cs
- StringStorage.cs
- NonParentingControl.cs
- CodeGeneratorAttribute.cs
- TraceUtils.cs
- EditingCommands.cs
- isolationinterop.cs
- ArgIterator.cs
- ModelItemDictionaryImpl.cs
- StandardOleMarshalObject.cs
- PrimaryKeyTypeConverter.cs
- OrderedDictionary.cs
- HttpStreams.cs
- XslTransform.cs
- FontWeightConverter.cs
- BamlLocalizabilityResolver.cs
- VolatileEnlistmentState.cs
- WindowsGraphics.cs
- DesignerDataView.cs
- wgx_render.cs
- SqlBulkCopy.cs
- PinnedBufferMemoryStream.cs
- NameHandler.cs
- StateDesigner.cs
- InternalResources.cs
- NumberFunctions.cs
- BufferedStream.cs
- CollectionConverter.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- ApplicationManager.cs
- HttpHandlerActionCollection.cs
- SiteMembershipCondition.cs
- PropertyValue.cs
- TypeInfo.cs
- ChannelDispatcherCollection.cs
- TreeView.cs
- TypeSystemHelpers.cs
- MemoryRecordBuffer.cs
- Char.cs
- GetMemberBinder.cs
- ComplexPropertyEntry.cs
- MarshalByValueComponent.cs
- oledbconnectionstring.cs
- SmtpTransport.cs
- DataFormats.cs
- EditorPartChrome.cs
- _HeaderInfoTable.cs
- UserControlParser.cs
- DynamicDataRouteHandler.cs
- storepermissionattribute.cs
- URLMembershipCondition.cs
- LinearKeyFrames.cs
- WrappedIUnknown.cs
- SmtpException.cs
- DesignerView.Commands.cs
- StreamInfo.cs
- StatusBarItemAutomationPeer.cs
- FileUtil.cs
- StdValidatorsAndConverters.cs
- AssemblyBuilderData.cs
- ConfigurationLocation.cs
- ListBindingConverter.cs
- NameSpaceExtractor.cs
- ParallelTimeline.cs
- BaseHashHelper.cs
- NonParentingControl.cs
- DiscoveryClientReferences.cs
- BamlResourceSerializer.cs
- SqlCommand.cs
- ResourcesGenerator.cs
- OutputCacheEntry.cs
- clipboard.cs
- AvtEvent.cs
- IDReferencePropertyAttribute.cs
- ZoneIdentityPermission.cs
- MsmqBindingElementBase.cs
- FilterQueryOptionExpression.cs
- wmiprovider.cs
- BaseDataBoundControl.cs
- DateTimeStorage.cs
- GridEntry.cs
- AddInContractAttribute.cs
- RegexRunnerFactory.cs
- DescendentsWalkerBase.cs
- AddressingVersion.cs
- XmlSerializerAssemblyAttribute.cs
- XmlNodeChangedEventArgs.cs
- WizardPanelChangingEventArgs.cs
- ModelVisual3D.cs
- TTSEvent.cs
- HtmlHead.cs
- AsyncOperation.cs
- DoubleLink.cs
- SystemColors.cs