Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / 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; } } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WsatTransactionInfo.cs
- ReaderContextStackData.cs
- NavigationProperty.cs
- TextParagraphProperties.cs
- PageBuildProvider.cs
- DrawListViewItemEventArgs.cs
- PeerTransportListenAddressValidatorAttribute.cs
- QualifiedCellIdBoolean.cs
- CreatingCookieEventArgs.cs
- SystemIcons.cs
- CommandPlan.cs
- TableAutomationPeer.cs
- Viewport3DAutomationPeer.cs
- OperationPerformanceCounters.cs
- NotifyParentPropertyAttribute.cs
- InlineObject.cs
- ToolZone.cs
- TreeNodeCollection.cs
- TextEditorParagraphs.cs
- ServiceDocument.cs
- WindowsStatic.cs
- AnnouncementEndpoint.cs
- CategoryAttribute.cs
- XpsInterleavingPolicy.cs
- DataGridViewControlCollection.cs
- OutputCacheModule.cs
- OdbcConnectionStringbuilder.cs
- OrthographicCamera.cs
- ParserStack.cs
- ColorBuilder.cs
- SqlNamer.cs
- TrackingStringDictionary.cs
- ParameterDataSourceExpression.cs
- MeshGeometry3D.cs
- ErrorHandlingReceiver.cs
- AncestorChangedEventArgs.cs
- CompositeControl.cs
- MarkupWriter.cs
- newinstructionaction.cs
- SystemGatewayIPAddressInformation.cs
- ObjectToIdCache.cs
- DateTime.cs
- DataGridColumnStyleMappingNameEditor.cs
- HttpWebRequestElement.cs
- SafeCertificateStore.cs
- BitmapMetadata.cs
- RectAnimation.cs
- DocumentViewerAutomationPeer.cs
- ArraySortHelper.cs
- DataGridViewRowHeaderCell.cs
- ActivityDesignerResources.cs
- TryExpression.cs
- GACIdentityPermission.cs
- PlatformCulture.cs
- TextServicesLoader.cs
- HtmlInputButton.cs
- Helper.cs
- ListViewHitTestInfo.cs
- XmlSchemaCollection.cs
- UniqueID.cs
- DynamicScriptObject.cs
- Int32CollectionValueSerializer.cs
- WindowHideOrCloseTracker.cs
- UserControl.cs
- ForceCopyBuildProvider.cs
- CustomAttributeBuilder.cs
- ButtonFlatAdapter.cs
- ISAPIWorkerRequest.cs
- EmptyCollection.cs
- StatusStrip.cs
- RemotingServices.cs
- OpenTypeLayoutCache.cs
- XmlSchemaSearchPattern.cs
- WebControlAdapter.cs
- OLEDB_Enum.cs
- ServerValidateEventArgs.cs
- _FtpDataStream.cs
- XmlSerializerAssemblyAttribute.cs
- HierarchicalDataBoundControlAdapter.cs
- NullReferenceException.cs
- PriorityQueue.cs
- ItemPager.cs
- ItemCheckedEvent.cs
- BaseCodePageEncoding.cs
- Polygon.cs
- DbInsertCommandTree.cs
- DLinqDataModelProvider.cs
- IteratorFilter.cs
- MostlySingletonList.cs
- VisualBasic.cs
- PackageRelationshipSelector.cs
- MessageDescriptionCollection.cs
- CapabilitiesState.cs
- RemotingConfiguration.cs
- ZipIOLocalFileDataDescriptor.cs
- StreamingContext.cs
- CqlBlock.cs
- Html32TextWriter.cs
- RoleManagerModule.cs
- DataBindEngine.cs