Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / clr / src / BCL / System / SharedStatics.cs / 2 / 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 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ConfigurationManagerHelper.cs
- Control.cs
- BrowserCapabilitiesCodeGenerator.cs
- WorkflowMarkupSerializationManager.cs
- WindowClosedEventArgs.cs
- DrawingVisual.cs
- Int16AnimationUsingKeyFrames.cs
- HtmlLabelAdapter.cs
- SpinWait.cs
- ExpressionCopier.cs
- WpfGeneratedKnownProperties.cs
- UnsafeNativeMethodsCLR.cs
- VerificationException.cs
- MarginCollapsingState.cs
- UndoManager.cs
- SafeNativeMethods.cs
- _HTTPDateParse.cs
- DbMetaDataCollectionNames.cs
- XhtmlBasicValidatorAdapter.cs
- SimpleTypesSurrogate.cs
- ResXFileRef.cs
- XmlArrayItemAttributes.cs
- COAUTHINFO.cs
- XhtmlTextWriter.cs
- XPathNodeList.cs
- WebPartUtil.cs
- AdapterUtil.cs
- CompoundFileStreamReference.cs
- XmlDictionaryReaderQuotas.cs
- ComplexTypeEmitter.cs
- ConversionContext.cs
- KeySplineConverter.cs
- ListSortDescription.cs
- TracedNativeMethods.cs
- XmlSchemaFacet.cs
- ExtensionQuery.cs
- MessageDecoder.cs
- XPathDocumentIterator.cs
- EncodingNLS.cs
- RC2.cs
- InputLanguageCollection.cs
- NamedObject.cs
- PrimitiveDataContract.cs
- X509Chain.cs
- SimpleType.cs
- SetState.cs
- LoadRetryConstantStrategy.cs
- SQLBinaryStorage.cs
- Authorization.cs
- XhtmlConformanceSection.cs
- XPathNavigatorKeyComparer.cs
- ActivityXRefPropertyEditor.cs
- ActivityBuilderHelper.cs
- MessageSmuggler.cs
- RowParagraph.cs
- SourceFilter.cs
- Property.cs
- LinqDataSourceStatusEventArgs.cs
- DbInsertCommandTree.cs
- ControlAdapter.cs
- RemotingConfigParser.cs
- HeaderUtility.cs
- EdmRelationshipNavigationPropertyAttribute.cs
- Geometry3D.cs
- CommonGetThemePartSize.cs
- RectAnimationClockResource.cs
- XmlSchemaAny.cs
- ToolStripRendererSwitcher.cs
- XamlInt32CollectionSerializer.cs
- DSASignatureFormatter.cs
- SetIndexBinder.cs
- Adorner.cs
- WorkflowRuntimeElement.cs
- ColumnWidthChangedEvent.cs
- XhtmlMobileTextWriter.cs
- PageBuildProvider.cs
- BoolExpr.cs
- oledbmetadatacolumnnames.cs
- ValidatorUtils.cs
- SemanticTag.cs
- HttpHeaderCollection.cs
- Help.cs
- GroupBoxAutomationPeer.cs
- UserMapPath.cs
- DataSourceSelectArguments.cs
- DataSourceViewSchemaConverter.cs
- ToolStripItemEventArgs.cs
- BrushMappingModeValidation.cs
- PreviewControlDesigner.cs
- SerializationStore.cs
- WebBrowser.cs
- CodeActivityContext.cs
- NamespaceEmitter.cs
- SqlConnectionFactory.cs
- UnsafeNativeMethods.cs
- Scheduler.cs
- CheckBox.cs
- HttpRuntime.cs
- SetIndexBinder.cs
- XmlSchemaAnnotation.cs