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
- ILGen.cs
- _NtlmClient.cs
- ConstrainedDataObject.cs
- ButtonColumn.cs
- HtmlUtf8RawTextWriter.cs
- Button.cs
- AttributeQuery.cs
- ResolveNameEventArgs.cs
- InstanceKeyCompleteException.cs
- TextSelectionHighlightLayer.cs
- TransactionState.cs
- XmlNode.cs
- AttachedPropertyMethodSelector.cs
- FrameworkObject.cs
- SetStateEventArgs.cs
- PageParserFilter.cs
- ConstraintCollection.cs
- ExpandedWrapper.cs
- FlowDocumentReaderAutomationPeer.cs
- BStrWrapper.cs
- ContentPathSegment.cs
- XamlGridLengthSerializer.cs
- SudsParser.cs
- Propagator.JoinPropagator.cs
- TriState.cs
- BindStream.cs
- DebugViewWriter.cs
- DescendentsWalkerBase.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- CommunicationException.cs
- WinFormsSecurity.cs
- DataObjectMethodAttribute.cs
- XmlTextReader.cs
- HttpConfigurationContext.cs
- ObjectListCommandsPage.cs
- HwndSubclass.cs
- WebRequestModuleElementCollection.cs
- ToolStripPanelRenderEventArgs.cs
- IdleTimeoutMonitor.cs
- ResXResourceWriter.cs
- StateMachineTimers.cs
- infer.cs
- BitmapImage.cs
- SRef.cs
- SecurityUtils.cs
- NamespaceEmitter.cs
- ApplicationCommands.cs
- TreeBuilderBamlTranslator.cs
- CustomAssemblyResolver.cs
- CorrelationRequestContext.cs
- InvalidComObjectException.cs
- Pair.cs
- PointHitTestResult.cs
- RegexInterpreter.cs
- TableItemStyle.cs
- SerializationHelper.cs
- DirectoryRootQuery.cs
- PeerCredentialElement.cs
- EditorPartChrome.cs
- SmtpFailedRecipientsException.cs
- Drawing.cs
- CommonObjectSecurity.cs
- XmlSchemaAttribute.cs
- CoordinationService.cs
- HashMembershipCondition.cs
- ExceptionHandlerDesigner.cs
- ColumnReorderedEventArgs.cs
- ConfigurationLocation.cs
- SchemaCollectionPreprocessor.cs
- LineBreakRecord.cs
- WpfXamlType.cs
- TextViewElement.cs
- OdbcConnectionString.cs
- FutureFactory.cs
- DecimalAnimationUsingKeyFrames.cs
- ToolStripPanel.cs
- ConfigurationStrings.cs
- DataContext.cs
- WorkflowInstanceRecord.cs
- CalendarAutomationPeer.cs
- ByteAnimationUsingKeyFrames.cs
- UnicodeEncoding.cs
- ObjectStateManagerMetadata.cs
- SQLInt32Storage.cs
- SecurityContext.cs
- AsnEncodedData.cs
- _SpnDictionary.cs
- ResolveResponse.cs
- SystemPens.cs
- DataTablePropertyDescriptor.cs
- EdmScalarPropertyAttribute.cs
- MultilineStringConverter.cs
- XmlSerializableWriter.cs
- CodeValidator.cs
- ZipIOExtraFieldPaddingElement.cs
- EntityCommandDefinition.cs
- ResourcePool.cs
- StreamProxy.cs
- HashHelper.cs
- FixedDSBuilder.cs