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
- IntermediatePolicyValidator.cs
- Processor.cs
- MULTI_QI.cs
- OdbcEnvironmentHandle.cs
- XmlUTF8TextReader.cs
- EncryptionUtility.cs
- CodeSpit.cs
- CodeTypeMember.cs
- StreamResourceInfo.cs
- ControlUtil.cs
- AuthenticationModuleElement.cs
- ContentPlaceHolder.cs
- ZeroOpNode.cs
- IdentityValidationException.cs
- CorrelationService.cs
- GridPattern.cs
- PasswordRecovery.cs
- CalendarData.cs
- TabItemAutomationPeer.cs
- MenuAutomationPeer.cs
- HttpDigestClientElement.cs
- GridViewDeletedEventArgs.cs
- DataPager.cs
- AttributeData.cs
- HTMLTagNameToTypeMapper.cs
- StrongNameKeyPair.cs
- Image.cs
- OverlappedContext.cs
- WindowsEditBoxRange.cs
- EncoderNLS.cs
- EventRouteFactory.cs
- QueryGenerator.cs
- StrongNameUtility.cs
- SerializerProvider.cs
- RelativeSource.cs
- EntityCommand.cs
- NameValueSectionHandler.cs
- HWStack.cs
- CountdownEvent.cs
- ValidatorUtils.cs
- TextRangeAdaptor.cs
- XmlSchemaAnnotated.cs
- CookielessHelper.cs
- TextParagraphProperties.cs
- ManageRequest.cs
- httpstaticobjectscollection.cs
- UrlPath.cs
- ActivityDesignerAccessibleObject.cs
- EncoderReplacementFallback.cs
- CodeCompiler.cs
- RequestTimeoutManager.cs
- SqlTransaction.cs
- UnmanagedMemoryStream.cs
- XmlElementAttributes.cs
- UIElement3DAutomationPeer.cs
- ScriptResourceAttribute.cs
- ResourceLoader.cs
- exports.cs
- LinqDataSourceDisposeEventArgs.cs
- DesignerCommandAdapter.cs
- Html32TextWriter.cs
- MessageQueueTransaction.cs
- TargetControlTypeCache.cs
- UiaCoreApi.cs
- ComplexPropertyEntry.cs
- CacheModeConverter.cs
- WebPartDisplayModeCancelEventArgs.cs
- Base64Encoding.cs
- System.Data_BID.cs
- BamlResourceSerializer.cs
- _HelperAsyncResults.cs
- webeventbuffer.cs
- AttributeQuery.cs
- FtpRequestCacheValidator.cs
- SqlPersonalizationProvider.cs
- FunctionDescription.cs
- OneOfScalarConst.cs
- ExpressionUtilities.cs
- SynchronizedRandom.cs
- KerberosSecurityTokenProvider.cs
- QuaternionConverter.cs
- StringFunctions.cs
- HandlerWithFactory.cs
- Event.cs
- TypeNameConverter.cs
- RIPEMD160.cs
- PrincipalPermission.cs
- FixedPageStructure.cs
- WindowsRichEditRange.cs
- RenderTargetBitmap.cs
- ProviderUtil.cs
- SevenBitStream.cs
- BamlResourceSerializer.cs
- DataControlReferenceCollection.cs
- PageAsyncTaskManager.cs
- PersonalizationProvider.cs
- SessionStateItemCollection.cs
- ErrorWrapper.cs
- ContentPresenter.cs
- ADMembershipProvider.cs