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
- ToolTipService.cs
- ScriptResourceHandler.cs
- TabPage.cs
- GenericsInstances.cs
- ResourceExpression.cs
- TableRowCollection.cs
- SqlTriggerAttribute.cs
- SystemNetworkInterface.cs
- HotCommands.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- SessionParameter.cs
- DBDataPermission.cs
- DbParameterHelper.cs
- WizardStepBase.cs
- WindowsFormsHostAutomationPeer.cs
- ParameterElement.cs
- SourceSwitch.cs
- _Semaphore.cs
- MonitoringDescriptionAttribute.cs
- RegexParser.cs
- ObjectSet.cs
- ServerIdentity.cs
- SmtpNegotiateAuthenticationModule.cs
- ParserContext.cs
- FileUpload.cs
- VisualStyleElement.cs
- DataGridRelationshipRow.cs
- WebPartZoneAutoFormat.cs
- DataGridViewCellMouseEventArgs.cs
- WinFormsUtils.cs
- DetailsViewUpdatedEventArgs.cs
- _NativeSSPI.cs
- CodeCompiler.cs
- OrderingExpression.cs
- ReturnValue.cs
- SmtpAuthenticationManager.cs
- StartUpEventArgs.cs
- _TransmitFileOverlappedAsyncResult.cs
- EmissiveMaterial.cs
- SmiSettersStream.cs
- ConfigurationLocation.cs
- ListItem.cs
- WebBrowserHelper.cs
- DataKeyArray.cs
- DbCommandDefinition.cs
- OleDbRowUpdatedEvent.cs
- VBIdentifierTrimConverter.cs
- Effect.cs
- ComboBoxDesigner.cs
- Block.cs
- CodeAccessPermission.cs
- TraceContextRecord.cs
- PropertyEmitter.cs
- Metafile.cs
- Int16Converter.cs
- XNodeNavigator.cs
- ObjectAssociationEndMapping.cs
- SqlConnectionPoolGroupProviderInfo.cs
- RegexCode.cs
- PointCollection.cs
- HMACSHA256.cs
- InvalidDataException.cs
- KeyFrames.cs
- PropertyChangingEventArgs.cs
- COM2ExtendedUITypeEditor.cs
- HybridObjectCache.cs
- Style.cs
- Freezable.cs
- MarshalDirectiveException.cs
- CalendarTable.cs
- DisposableCollectionWrapper.cs
- AuthenticationConfig.cs
- ThemeDictionaryExtension.cs
- CustomAttributeBuilder.cs
- PackagePartCollection.cs
- SharedUtils.cs
- ClientScriptManager.cs
- SQLBinary.cs
- RightsManagementPermission.cs
- HitTestParameters3D.cs
- TypeBuilder.cs
- IndexerNameAttribute.cs
- CalendarButtonAutomationPeer.cs
- ConsoleTraceListener.cs
- AttachedPropertyInfo.cs
- SqlConnectionPoolGroupProviderInfo.cs
- ImageSource.cs
- Rectangle.cs
- SmiContext.cs
- CompiledAction.cs
- ObjectDataSourceDisposingEventArgs.cs
- _ListenerRequestStream.cs
- CommonXSendMessage.cs
- dataprotectionpermissionattribute.cs
- InternalSafeNativeMethods.cs
- EllipticalNodeOperations.cs
- _OverlappedAsyncResult.cs
- NavigationCommands.cs
- XmlStreamStore.cs
- Span.cs