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
- SpeakInfo.cs
- HTMLTagNameToTypeMapper.cs
- OdbcConnectionHandle.cs
- ImplicitInputBrush.cs
- SimpleHandlerFactory.cs
- DynamicDocumentPaginator.cs
- DataGridViewImageCell.cs
- TypeGenericEnumerableViewSchema.cs
- ValidationError.cs
- UnsafePeerToPeerMethods.cs
- Encoder.cs
- XmlChoiceIdentifierAttribute.cs
- WaitForChangedResult.cs
- ChangeBlockUndoRecord.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- RegionInfo.cs
- IgnoreDeviceFilterElementCollection.cs
- Size3D.cs
- DateTimeOffsetAdapter.cs
- UpDownEvent.cs
- KeyEvent.cs
- TargetFrameworkAttribute.cs
- OptimisticConcurrencyException.cs
- ListBase.cs
- RuntimeConfigLKG.cs
- DefaultEvaluationContext.cs
- AlternateView.cs
- ParameterToken.cs
- WebPartEditorCancelVerb.cs
- RtfNavigator.cs
- ProtectedConfigurationProviderCollection.cs
- GC.cs
- FileAuthorizationModule.cs
- XmlCharCheckingReader.cs
- Trace.cs
- HashAlgorithm.cs
- DataGridViewRowsAddedEventArgs.cs
- List.cs
- HttpProcessUtility.cs
- XamlInterfaces.cs
- SchemaSetCompiler.cs
- SiteMapNodeCollection.cs
- CellParaClient.cs
- SchemaAttDef.cs
- RequestCachingSection.cs
- QueryTask.cs
- TextEditorCharacters.cs
- ServiceMetadataContractBehavior.cs
- HttpCachePolicy.cs
- Transform3D.cs
- NativeCompoundFileAPIs.cs
- StreamGeometryContext.cs
- ReadOnlyDataSourceView.cs
- CapacityStreamGeometryContext.cs
- TypeSystem.cs
- ClientScriptManagerWrapper.cs
- RootBrowserWindowProxy.cs
- DependencyPropertyDescriptor.cs
- MethodBuilder.cs
- WebHeaderCollection.cs
- Line.cs
- TranslateTransform3D.cs
- TextModifierScope.cs
- RouteItem.cs
- UIElementAutomationPeer.cs
- SelectionProcessor.cs
- ListControlBuilder.cs
- MembershipPasswordException.cs
- CryptoKeySecurity.cs
- BooleanConverter.cs
- WebPartManager.cs
- Pen.cs
- DictionarySectionHandler.cs
- HtmlHead.cs
- TreeNodeStyle.cs
- FontCacheUtil.cs
- SignatureToken.cs
- StylusButtonEventArgs.cs
- RijndaelManaged.cs
- TimeoutException.cs
- XmlAttribute.cs
- RijndaelManagedTransform.cs
- PointHitTestResult.cs
- WindowsRegion.cs
- _NestedMultipleAsyncResult.cs
- DeflateStream.cs
- Sequence.cs
- querybuilder.cs
- ForeignConstraint.cs
- UriScheme.cs
- InternalSendMessage.cs
- DataControlFieldsEditor.cs
- UriSection.cs
- CodeDelegateInvokeExpression.cs
- PageStatePersister.cs
- InternalControlCollection.cs
- ComEventsInfo.cs
- Solver.cs
- Simplifier.cs
- DataView.cs