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
- SafeLocalMemHandle.cs
- SpeechRecognizer.cs
- ContentType.cs
- LineServicesCallbacks.cs
- ADMembershipProvider.cs
- ObjectParameterCollection.cs
- LayoutEngine.cs
- TextSearch.cs
- AutomationTextAttribute.cs
- DataColumnMapping.cs
- TextServicesCompartmentEventSink.cs
- TagPrefixAttribute.cs
- OdbcCommandBuilder.cs
- BaseTemplateCodeDomTreeGenerator.cs
- ToolStripSplitStackLayout.cs
- Vector3DCollectionConverter.cs
- XmlnsPrefixAttribute.cs
- SqlClientWrapperSmiStreamChars.cs
- HelpInfo.cs
- LambdaCompiler.Unary.cs
- FixedSchema.cs
- CursorConverter.cs
- KnownBoxes.cs
- WSTrustFeb2005.cs
- EmptyTextWriter.cs
- UrlAuthorizationModule.cs
- BindingGroup.cs
- DataGridViewElement.cs
- IsolatedStorageException.cs
- XmlWriter.cs
- PaintEvent.cs
- EncryptedXml.cs
- StreamWithDictionary.cs
- CounterSet.cs
- xamlnodes.cs
- COM2IDispatchConverter.cs
- InvalidDataContractException.cs
- BridgeDataRecord.cs
- HostExecutionContextManager.cs
- SecurityProtocolFactory.cs
- Missing.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- ThreadPool.cs
- ApplicationDirectory.cs
- ColorConvertedBitmap.cs
- StoreUtilities.cs
- InternalConfigConfigurationFactory.cs
- UseManagedPresentationBindingElement.cs
- XhtmlTextWriter.cs
- RequestCacheValidator.cs
- TransformerConfigurationWizardBase.cs
- IRCollection.cs
- TreeViewItemAutomationPeer.cs
- ActivityExecutionWorkItem.cs
- ScriptServiceAttribute.cs
- ClientFormsIdentity.cs
- FormsAuthenticationUser.cs
- XmlDocumentFragment.cs
- StringCollectionEditor.cs
- WebPartHelpVerb.cs
- ObjectDataProvider.cs
- PromptStyle.cs
- SystemColors.cs
- PeerNearMe.cs
- WhitespaceRuleReader.cs
- OdbcConnectionPoolProviderInfo.cs
- VectorKeyFrameCollection.cs
- HttpResponseInternalBase.cs
- DataGridViewTopLeftHeaderCell.cs
- SafeUserTokenHandle.cs
- Win32MouseDevice.cs
- DoneReceivingAsyncResult.cs
- XsltContext.cs
- SynchronizationContext.cs
- SerializableTypeCodeDomSerializer.cs
- RefType.cs
- CheckBoxField.cs
- XpsSerializationManager.cs
- SliderAutomationPeer.cs
- DateTimeValueSerializerContext.cs
- AnnotationAdorner.cs
- BezierSegment.cs
- Translator.cs
- CustomCredentialPolicy.cs
- CodeGen.cs
- Utility.cs
- OperationFormatStyle.cs
- AstTree.cs
- SerialPinChanges.cs
- GeneralTransform3DTo2D.cs
- URLMembershipCondition.cs
- CaseCqlBlock.cs
- TypeToTreeConverter.cs
- XmlArrayAttribute.cs
- Light.cs
- VariableDesigner.xaml.cs
- WeakHashtable.cs
- XmlConvert.cs
- CompositionDesigner.cs
- PropertyDescriptor.cs