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
- HelpEvent.cs
- DescendantBaseQuery.cs
- DataGridViewComboBoxEditingControl.cs
- ObjectListGeneralPage.cs
- XmlSchemaSet.cs
- WebBrowserContainer.cs
- ToolboxItemFilterAttribute.cs
- XmlSerializationGeneratedCode.cs
- ExpressionHelper.cs
- BindingExpression.cs
- Queue.cs
- SubMenuStyleCollectionEditor.cs
- Timeline.cs
- FontDifferentiator.cs
- PrivilegedConfigurationManager.cs
- SqlError.cs
- PreviewPageInfo.cs
- EditorZoneBase.cs
- Regex.cs
- WebResourceUtil.cs
- SqlTriggerAttribute.cs
- HostProtectionException.cs
- ComponentDispatcherThread.cs
- TraceListeners.cs
- GridToolTip.cs
- ComboBoxRenderer.cs
- OpenFileDialog.cs
- SqlEnums.cs
- HttpWebResponse.cs
- SQLSingleStorage.cs
- Base64Encoder.cs
- KnownBoxes.cs
- IntPtr.cs
- NavigationEventArgs.cs
- ListViewItem.cs
- NumberFunctions.cs
- DocumentOrderQuery.cs
- DeriveBytes.cs
- Int64.cs
- MsmqIntegrationMessagePool.cs
- MediaTimeline.cs
- Annotation.cs
- TableLayoutStyle.cs
- ExtensionQuery.cs
- TraceHandler.cs
- CacheVirtualItemsEvent.cs
- WSTrustFeb2005.cs
- ResourceLoader.cs
- SrgsItemList.cs
- JoinTreeSlot.cs
- IconHelper.cs
- ExpressionNormalizer.cs
- CookieParameter.cs
- SoapObjectReader.cs
- SmtpNtlmAuthenticationModule.cs
- CoreSwitches.cs
- UncommonField.cs
- PeerTransportCredentialType.cs
- MetadataCache.cs
- ProfileService.cs
- EventLogReader.cs
- RangeBaseAutomationPeer.cs
- MessageFilterTable.cs
- GridViewItemAutomationPeer.cs
- Attributes.cs
- PrefixQName.cs
- WebBrowserNavigatingEventHandler.cs
- Sql8ExpressionRewriter.cs
- DetailsViewCommandEventArgs.cs
- FormViewInsertedEventArgs.cs
- DesignerLabelAdapter.cs
- CachedFontFace.cs
- OrthographicCamera.cs
- CommonObjectSecurity.cs
- PixelFormats.cs
- HttpModuleAction.cs
- ExtensionWindowHeader.cs
- DockPanel.cs
- VisualTreeHelper.cs
- X500Name.cs
- IdentityHolder.cs
- RelationshipDetailsRow.cs
- SQLDateTimeStorage.cs
- TreeViewImageGenerator.cs
- RootContext.cs
- CqlErrorHelper.cs
- FastEncoder.cs
- ClientScriptManager.cs
- RotateTransform.cs
- SqlParameterCollection.cs
- FrameworkContentElementAutomationPeer.cs
- DataStorage.cs
- Pair.cs
- GetCardDetailsRequest.cs
- ImageConverter.cs
- LiteralTextContainerControlBuilder.cs
- RevocationPoint.cs
- PathSegment.cs
- DataGridViewTextBoxCell.cs
- CodeDOMProvider.cs