Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / CompMod / System / Diagnostics / TraceSource.cs / 1 / TraceSource.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Threading; using System.Configuration; using System.Security; using System.Security.Permissions; namespace System.Diagnostics { public class TraceSource { private static Listtracesources = new List (); private readonly TraceEventCache manager = new TraceEventCache(); private SourceSwitch internalSwitch; private TraceListenerCollection listeners; private StringDictionary attributes; private SourceLevels switchLevel; private string sourceName; internal bool _initCalled = false; // Whether we've called Initialize already. public TraceSource(string name) : this(name, SourceLevels.Off) { } public TraceSource(string name, SourceLevels defaultLevel) { if (name == null) throw new ArgumentNullException("name"); if (name.Length == 0) throw new ArgumentException("name"); sourceName = name; switchLevel = defaultLevel; // Delay load config to avoid perf (and working set) issues in retail // Add a weakreference to this source lock(tracesources) { tracesources.Add(new WeakReference(this)); } } private void Initialize() { if (!_initCalled) { lock(this) { if (_initCalled) return; SourceElementsCollection sourceElements = DiagnosticsConfiguration.Sources; if (sourceElements != null) { SourceElement sourceElement = sourceElements[sourceName]; if (sourceElement != null) { if (!String.IsNullOrEmpty(sourceElement.SwitchName)) { CreateSwitch(sourceElement.SwitchType, sourceElement.SwitchName); } else { CreateSwitch(sourceElement.SwitchType, sourceName); if (!String.IsNullOrEmpty(sourceElement.SwitchValue)) internalSwitch.Level = (SourceLevels) Enum.Parse(typeof(SourceLevels), sourceElement.SwitchValue); } listeners = sourceElement.Listeners.GetRuntimeObject(); attributes = new StringDictionary(); TraceUtils.VerifyAttributes(sourceElement.Attributes, GetSupportedAttributes(), this); attributes.contents = sourceElement.Attributes; } else NoConfigInit(); } else NoConfigInit(); _initCalled = true; } } } private void NoConfigInit() { internalSwitch = new SourceSwitch(sourceName, switchLevel.ToString()); listeners = new TraceListenerCollection(); listeners.Add(new DefaultTraceListener()); attributes = null; } [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.UnmanagedCode)] public void Close() { // No need to call Initialize() if (listeners != null) { // Use global lock lock (TraceInternal.critSec) { foreach (TraceListener listener in listeners) { listener.Close(); } } } } public void Flush() { // No need to call Initialize() if (listeners != null) { if (TraceInternal.UseGlobalLock) { lock (TraceInternal.critSec) { foreach (TraceListener listener in listeners) { listener.Flush(); } } } else { foreach (TraceListener listener in listeners) { if (!listener.IsThreadSafe) { lock (listener) { listener.Flush(); } } else { listener.Flush(); } } } } } virtual protected internal string[] GetSupportedAttributes() { return null; } internal static void RefreshAll() { lock (tracesources) { for (int i=0; i // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Threading; using System.Configuration; using System.Security; using System.Security.Permissions; namespace System.Diagnostics { public class TraceSource { private static List tracesources = new List (); private readonly TraceEventCache manager = new TraceEventCache(); private SourceSwitch internalSwitch; private TraceListenerCollection listeners; private StringDictionary attributes; private SourceLevels switchLevel; private string sourceName; internal bool _initCalled = false; // Whether we've called Initialize already. public TraceSource(string name) : this(name, SourceLevels.Off) { } public TraceSource(string name, SourceLevels defaultLevel) { if (name == null) throw new ArgumentNullException("name"); if (name.Length == 0) throw new ArgumentException("name"); sourceName = name; switchLevel = defaultLevel; // Delay load config to avoid perf (and working set) issues in retail // Add a weakreference to this source lock(tracesources) { tracesources.Add(new WeakReference(this)); } } private void Initialize() { if (!_initCalled) { lock(this) { if (_initCalled) return; SourceElementsCollection sourceElements = DiagnosticsConfiguration.Sources; if (sourceElements != null) { SourceElement sourceElement = sourceElements[sourceName]; if (sourceElement != null) { if (!String.IsNullOrEmpty(sourceElement.SwitchName)) { CreateSwitch(sourceElement.SwitchType, sourceElement.SwitchName); } else { CreateSwitch(sourceElement.SwitchType, sourceName); if (!String.IsNullOrEmpty(sourceElement.SwitchValue)) internalSwitch.Level = (SourceLevels) Enum.Parse(typeof(SourceLevels), sourceElement.SwitchValue); } listeners = sourceElement.Listeners.GetRuntimeObject(); attributes = new StringDictionary(); TraceUtils.VerifyAttributes(sourceElement.Attributes, GetSupportedAttributes(), this); attributes.contents = sourceElement.Attributes; } else NoConfigInit(); } else NoConfigInit(); _initCalled = true; } } } private void NoConfigInit() { internalSwitch = new SourceSwitch(sourceName, switchLevel.ToString()); listeners = new TraceListenerCollection(); listeners.Add(new DefaultTraceListener()); attributes = null; } [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.UnmanagedCode)] public void Close() { // No need to call Initialize() if (listeners != null) { // Use global lock lock (TraceInternal.critSec) { foreach (TraceListener listener in listeners) { listener.Close(); } } } } public void Flush() { // No need to call Initialize() if (listeners != null) { if (TraceInternal.UseGlobalLock) { lock (TraceInternal.critSec) { foreach (TraceListener listener in listeners) { listener.Flush(); } } } else { foreach (TraceListener listener in listeners) { if (!listener.IsThreadSafe) { lock (listener) { listener.Flush(); } } else { listener.Flush(); } } } } } virtual protected internal string[] GetSupportedAttributes() { return null; } internal static void RefreshAll() { lock (tracesources) { for (int i=0; i
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ProcessRequestArgs.cs
- SchemaAttDef.cs
- _CookieModule.cs
- AtomicFile.cs
- RemoteX509Token.cs
- Event.cs
- PathFigure.cs
- TextEditorSelection.cs
- DurableInstanceContextProvider.cs
- RewritingSimplifier.cs
- ChildrenQuery.cs
- PermissionToken.cs
- BrowserDefinition.cs
- NewExpression.cs
- XmlQualifiedNameTest.cs
- TypeBuilder.cs
- SystemIPGlobalProperties.cs
- LayoutUtils.cs
- DataObjectCopyingEventArgs.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- ScopelessEnumAttribute.cs
- AssemblySettingAttributes.cs
- TypedReference.cs
- COM2PictureConverter.cs
- ServiceProviders.cs
- ByteConverter.cs
- InvalidPipelineStoreException.cs
- ToolstripProfessionalRenderer.cs
- FontFamily.cs
- CodeTypeReference.cs
- PropertyMappingExceptionEventArgs.cs
- DbMetaDataFactory.cs
- ProcessStartInfo.cs
- CellParagraph.cs
- TemplateEditingVerb.cs
- CapiSymmetricAlgorithm.cs
- Point4DConverter.cs
- transactioncontext.cs
- GenericTypeParameterBuilder.cs
- BoolLiteral.cs
- PagesSection.cs
- SourceChangedEventArgs.cs
- HttpCookieCollection.cs
- EnumerableCollectionView.cs
- MemberPathMap.cs
- DocumentViewerBaseAutomationPeer.cs
- TextEditorDragDrop.cs
- GregorianCalendarHelper.cs
- MsmqMessageSerializationFormat.cs
- ObjectTypeMapping.cs
- FileChangesMonitor.cs
- TreeViewEvent.cs
- SQLInt32Storage.cs
- SecurityPermission.cs
- CodeSnippetCompileUnit.cs
- TimersDescriptionAttribute.cs
- AtomMaterializer.cs
- EnumerableCollectionView.cs
- keycontainerpermission.cs
- DataGridViewRow.cs
- CodeExpressionCollection.cs
- OutputCacheModule.cs
- NextPreviousPagerField.cs
- DiagnosticsConfiguration.cs
- DateTimePicker.cs
- MaterialGroup.cs
- XmlEntity.cs
- Rect.cs
- _StreamFramer.cs
- SR.cs
- UInt16Storage.cs
- EntityParameter.cs
- MemberDomainMap.cs
- BinaryObjectInfo.cs
- CryptoApi.cs
- SimpleTextLine.cs
- ThemeDirectoryCompiler.cs
- FormViewDeleteEventArgs.cs
- Button.cs
- BamlRecordReader.cs
- ClientRuntimeConfig.cs
- XmlSchemaInclude.cs
- SqlXml.cs
- StreamInfo.cs
- PrimitiveXmlSerializers.cs
- DependencyObject.cs
- MenuItemBinding.cs
- Int16KeyFrameCollection.cs
- IdentityManager.cs
- MenuBase.cs
- LayoutEngine.cs
- Columns.cs
- HttpCookie.cs
- IconHelper.cs
- ToolStripRenderer.cs
- SqlXml.cs
- EffectiveValueEntry.cs
- XPathDocument.cs
- FontCollection.cs
- COM2ColorConverter.cs