Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / SharedStatics.cs / 1 / SharedStatics.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================================== ** ** Class: SharedStatics ** ** ** Purpose: Container for statics that are shared across AppDomains. ** ** =============================================================================*/ namespace System { using System.Threading; using System.Runtime.Remoting; using System.Security; using System.Security.Util; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using StringMaker = System.Security.Util.Tokenizer.StringMaker; internal sealed class SharedStatics { // this is declared static but is actually forced to be the same object // for each AppDomain at AppDomain create time. internal static SharedStatics _sharedStatics; // when we create the single object we can construct anything we will need // here. If not too many, then just create them all in the constructor, otherwise // can have the property check & create. Need to be aware of threading issues // when do so though. // Note: This ctor is not called when we setup _sharedStatics via AppDomain::SetupSharedStatics SharedStatics() { _Remoting_Identity_IDGuid = null; _Remoting_Identity_IDSeqNum = 0x40; // Reserve initial numbers for well known objects. _maker = null; } private String _Remoting_Identity_IDGuid; public static String Remoting_Identity_IDGuid { get { if (_sharedStatics._Remoting_Identity_IDGuid == null) { bool tookLock = false; RuntimeHelpers.PrepareConstrainedRegions(); try { Monitor.ReliableEnter(_sharedStatics, ref tookLock); if (_sharedStatics._Remoting_Identity_IDGuid == null) { _sharedStatics._Remoting_Identity_IDGuid = Guid.NewGuid().ToString().Replace('-', '_'); } } finally { if (tookLock) Monitor.Exit(_sharedStatics); } } BCLDebug.Assert(_sharedStatics._Remoting_Identity_IDGuid != null, "_sharedStatics._Remoting_Identity_IDGuid != null"); return _sharedStatics._Remoting_Identity_IDGuid; } } private StringMaker _maker; static public StringMaker GetSharedStringMaker() { StringMaker maker = null; bool tookLock = false; RuntimeHelpers.PrepareConstrainedRegions(); try { Monitor.ReliableEnter(_sharedStatics, ref tookLock); if (_sharedStatics._maker != null) { maker = _sharedStatics._maker; _sharedStatics._maker = null; } } finally { if (tookLock) Monitor.Exit(_sharedStatics); } if (maker == null) { maker = new StringMaker(); } return maker; } static public void ReleaseSharedStringMaker(ref StringMaker maker) { // save this stringmaker so someone else can use it bool tookLock = false; RuntimeHelpers.PrepareConstrainedRegions(); try { Monitor.ReliableEnter(_sharedStatics, ref tookLock); _sharedStatics._maker = maker; maker = null; } finally { if (tookLock) Monitor.Exit(_sharedStatics); } } // Note this may not need to be process-wide. private int _Remoting_Identity_IDSeqNum; internal static int Remoting_Identity_GetNextSeqNum() { return Interlocked.Increment(ref _sharedStatics._Remoting_Identity_IDSeqNum); } // This is the total amount of memory currently "reserved" via // all MemoryFailPoints allocated within the process. // Stored as a long because we need to use Interlocked.Add. private long _memFailPointReservedMemory; [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] internal static long AddMemoryFailPointReservation(long size) { // Size can legitimately be negative - see Dispose. return Interlocked.Add(ref _sharedStatics._memFailPointReservedMemory, (long) size); } internal static ulong MemoryFailPointReservedMemory { get { BCLDebug.Assert(_sharedStatics._memFailPointReservedMemory >= 0, "Process-wide MemoryFailPoint reserved memory was negative!"); return (ulong) _sharedStatics._memFailPointReservedMemory; } } } }
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ImageDrawing.cs
- ParameterCollection.cs
- RenamedEventArgs.cs
- ObjectStateFormatter.cs
- EmissiveMaterial.cs
- Ports.cs
- MeshGeometry3D.cs
- AsyncStreamReader.cs
- UpdatableWrapper.cs
- FullTrustAssemblyCollection.cs
- GenericEnumerator.cs
- DataGridCell.cs
- _PooledStream.cs
- SchemaEntity.cs
- SuppressIldasmAttribute.cs
- AsyncPostBackErrorEventArgs.cs
- QueuePathDialog.cs
- ForeignKeyConstraint.cs
- ServiceObjectContainer.cs
- ColumnResizeUndoUnit.cs
- RepeaterCommandEventArgs.cs
- PresentationTraceSources.cs
- WindowsToolbar.cs
- ToolStripRendererSwitcher.cs
- Bitmap.cs
- DataControlFieldCollection.cs
- PenLineJoinValidation.cs
- SQLMembershipProvider.cs
- TripleDES.cs
- TypeConverterHelper.cs
- XmlWriterTraceListener.cs
- TypeUnloadedException.cs
- Misc.cs
- ComboBoxItem.cs
- Propagator.Evaluator.cs
- OdbcInfoMessageEvent.cs
- DPTypeDescriptorContext.cs
- DetailsViewInsertedEventArgs.cs
- BooleanAnimationBase.cs
- AccessDataSource.cs
- MailAddressCollection.cs
- StartUpEventArgs.cs
- SqlMethodAttribute.cs
- NetworkStream.cs
- DataSourceConverter.cs
- SqlProvider.cs
- ListItemCollection.cs
- EmbeddedMailObject.cs
- AttachmentCollection.cs
- EmptyQuery.cs
- RegexEditorDialog.cs
- WorkflowInstanceAbortedRecord.cs
- XmlSchemaComplexType.cs
- NamespaceInfo.cs
- CodeDefaultValueExpression.cs
- KeyEventArgs.cs
- CachedBitmap.cs
- Instrumentation.cs
- PeerApplicationLaunchInfo.cs
- HostingEnvironmentException.cs
- RenderData.cs
- MsmqActivation.cs
- AuthenticationModulesSection.cs
- KeyValueConfigurationElement.cs
- WsdlInspector.cs
- Filter.cs
- ConnectionStringsExpressionBuilder.cs
- SRGSCompiler.cs
- TableDetailsRow.cs
- XPathChildIterator.cs
- DataMisalignedException.cs
- TextSimpleMarkerProperties.cs
- ColumnHeader.cs
- CapiHashAlgorithm.cs
- MethodExpr.cs
- RTLAwareMessageBox.cs
- EventBuilder.cs
- StrokeNode.cs
- TypedMessageConverter.cs
- MulticastNotSupportedException.cs
- MemoryPressure.cs
- RewritingPass.cs
- Function.cs
- XamlReader.cs
- COAUTHINFO.cs
- CorrelationService.cs
- AlternateViewCollection.cs
- SoapObjectReader.cs
- X509Certificate2Collection.cs
- AQNBuilder.cs
- ToolStripCustomTypeDescriptor.cs
- ParameterCollection.cs
- MethodBuilderInstantiation.cs
- contentDescriptor.cs
- HiddenFieldPageStatePersister.cs
- ParallelEnumerableWrapper.cs
- ConstNode.cs
- PageFunction.cs
- SwitchAttribute.cs
- NumericUpDownAccelerationCollection.cs