Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // 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; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlSerializableWriter.cs
- Tokenizer.cs
- ThousandthOfEmRealDoubles.cs
- PrintPageEvent.cs
- TypeUsage.cs
- CustomValidator.cs
- DataControlFieldHeaderCell.cs
- SqlFunctions.cs
- GuidelineSet.cs
- StrokeCollectionDefaultValueFactory.cs
- DiscoveryClientReferences.cs
- TabControlCancelEvent.cs
- PhoneCall.cs
- GridViewColumn.cs
- BindingExpressionUncommonField.cs
- SignatureToken.cs
- DispatcherProcessingDisabled.cs
- LinearKeyFrames.cs
- SHA1.cs
- GridViewPageEventArgs.cs
- ParagraphResult.cs
- XPathMessageContext.cs
- SystemWebCachingSectionGroup.cs
- AccessViolationException.cs
- ContainerUtilities.cs
- ISAPIRuntime.cs
- XPathDocumentIterator.cs
- RepeatBehavior.cs
- ThreadInterruptedException.cs
- BindUriHelper.cs
- XmlDomTextWriter.cs
- SecurityAlgorithmSuiteConverter.cs
- EventSinkActivityDesigner.cs
- Scheduling.cs
- WebPartsPersonalizationAuthorization.cs
- StrokeNodeOperations2.cs
- latinshape.cs
- StructuredProperty.cs
- DesignObjectWrapper.cs
- DataControlCommands.cs
- TextServicesCompartmentContext.cs
- Base64WriteStateInfo.cs
- ImageMap.cs
- FontConverter.cs
- QuerySafeNavigator.cs
- PaintValueEventArgs.cs
- ZipIOLocalFileBlock.cs
- BufferedResponseStream.cs
- ProfileGroupSettings.cs
- FontStretchConverter.cs
- AttributeData.cs
- ClientTargetCollection.cs
- XmlAttributeCollection.cs
- DataGridTemplateColumn.cs
- HttpListener.cs
- XsdBuildProvider.cs
- ITreeGenerator.cs
- ControlLocalizer.cs
- XmlSequenceWriter.cs
- Timer.cs
- RemoteEndpointMessageProperty.cs
- XhtmlBasicListAdapter.cs
- Site.cs
- SmtpDigestAuthenticationModule.cs
- ProfileSettingsCollection.cs
- SqlSelectStatement.cs
- GestureRecognizer.cs
- ParameterModifier.cs
- WorkflowServiceHostFactory.cs
- GC.cs
- PolicyValidationException.cs
- DbProviderFactory.cs
- DataPagerFieldCommandEventArgs.cs
- BitmapPalettes.cs
- PersonalizationAdministration.cs
- TextAdaptor.cs
- HttpUnhandledOperationInvoker.cs
- InternalPermissions.cs
- TiffBitmapEncoder.cs
- keycontainerpermission.cs
- ContextStaticAttribute.cs
- ResourceDictionary.cs
- DefinitionBase.cs
- IntegerValidatorAttribute.cs
- Int32AnimationBase.cs
- FormViewDeleteEventArgs.cs
- DeclaredTypeElement.cs
- X509CertificateClaimSet.cs
- InvalidDataException.cs
- UnsafeNativeMethods.cs
- NameValueSectionHandler.cs
- WindowsToolbar.cs
- ActionMessageFilter.cs
- MediaTimeline.cs
- ColumnProvider.cs
- DataGridRowHeaderAutomationPeer.cs
- RuleDefinitions.cs
- MouseActionValueSerializer.cs
- SmiConnection.cs
- HTMLTextWriter.cs