The Labs \ Source Viewer \ SSCLI \ System.Diagnostics \ TraceEventCache

  1. //------------------------------------------------------------------------------
  2. // <copyright file="TraceEventCache.cs" company="Microsoft">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. //------------------------------------------------------------------------------
  15. using System;
  16. using System.Threading;
  17. using System.Security.Permissions;
  18. using System.Text;
  19. using System.Collections;
  20. using System.Globalization;
  21. namespace System.Diagnostics
  22. {
  23.     public class TraceEventCache
  24.     {
  25.        
  26.         private static int processId;
  27.         private static string processName;
  28.        
  29.         private long timeStamp = -1;
  30.         private DateTime dateTime = DateTime.MinValue;
  31.         private string stackTrace = null;
  32.        
  33.         internal Guid ActivityId {
  34.             get { return Trace.CorrelationManager.ActivityId; }
  35.         }
  36.        
  37.         public string Callstack {
  38.             get {
  39.                 if (stackTrace == null)
  40.                     stackTrace = Environment.StackTrace;
  41.                 else
  42.                     new EnvironmentPermission(PermissionState.Unrestricted).Demand();
  43.                
  44.                 return stackTrace;
  45.             }
  46.         }
  47.        
  48.         public Stack LogicalOperationStack {
  49.             get { return Trace.CorrelationManager.LogicalOperationStack; }
  50.         }
  51.        
  52.         public DateTime DateTime {
  53.             get {
  54.                 if (dateTime == DateTime.MinValue)
  55.                     dateTime = DateTime.UtcNow;
  56.                 return dateTime;
  57.             }
  58.         }
  59.        
  60.         public int ProcessId {
  61.             get { return GetProcessId(); }
  62.         }
  63.        
  64.         public string ThreadId {
  65.             get { return GetThreadId().ToString(CultureInfo.InvariantCulture); }
  66.         }
  67.        
  68.         public long Timestamp {
  69.             get {
  70.                 if (timeStamp == -1)
  71.                     timeStamp = Stopwatch.GetTimestamp();
  72.                 return timeStamp;
  73.             }
  74.         }
  75.        
  76.         internal void Clear()
  77.         {
  78.             timeStamp = -1;
  79.             dateTime = DateTime.MinValue;
  80.             stackTrace = null;
  81.         }
  82.        
  83.         private static void InitProcessInfo()
  84.         {
  85.             // Demand unmanaged code permission
  86.             new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();
  87.            
  88.             if (processName == null) {
  89.                 Process p = Process.GetCurrentProcess();
  90.                 try {
  91.                     processId = p.Id;
  92.                     processName = p.ProcessName;
  93.                 }
  94.                 finally {
  95.                     p.Dispose();
  96.                 }
  97.             }
  98.         }
  99.        
  100.         static internal int GetProcessId()
  101.         {
  102.             InitProcessInfo();
  103.             return processId;
  104.         }
  105.        
  106.         static internal string GetProcessName()
  107.         {
  108.             InitProcessInfo();
  109.             return processName;
  110.         }
  111.        
  112.         static internal int GetThreadId()
  113.         {
  114.             return Thread.CurrentThread.ManagedThreadId;
  115.         }
  116.     }
  117. }

Developer Fusion