/// <summary> /// Get a report about the registered threads in this server. /// </summary> protected string GetThreadsReport() { // This should be a constant field. string reportFormat = "{0,6} {1,35} {2,16} {3,13} {4,10} {5,30}"; StringBuilder sb = new StringBuilder(); Watchdog.ThreadWatchdogInfo[] threads = Watchdog.GetThreadsInfo(); sb.Append(threads.Length + " threads are being tracked:" + Environment.NewLine); int timeNow = Environment.TickCount & Int32.MaxValue; sb.AppendFormat(reportFormat, "ID", "NAME", "LAST UPDATE (MS)", "LIFETIME (MS)", "PRIORITY", "STATE"); sb.Append(Environment.NewLine); foreach (Watchdog.ThreadWatchdogInfo twi in threads) { Thread t = twi.Thread; sb.AppendFormat( reportFormat, t.ManagedThreadId, t.Name, timeNow - twi.LastTick, timeNow - twi.FirstTick, t.Priority, t.ThreadState); sb.Append("\n"); } sb.Append("\n"); // For some reason mono 2.6.7 returns an empty threads set! Not going to confuse people by reporting // zero active threads. int totalThreads = Process.GetCurrentProcess().Threads.Count; if (totalThreads > 0) { sb.AppendFormat("Total threads active: {0}\n\n", totalThreads); } sb.Append("Main threadpool (excluding script engine pools)\n"); sb.Append(GetThreadPoolReport()); return(sb.ToString()); }
/// <summary> /// Get a report about the registered threads in this server. /// </summary> protected string GetThreadsReport() { // This should be a constant field. string reportFormat = "{0,6} {1,35} {2,16} {3,13} {4,10} {5,30}"; StringBuilder sb = new StringBuilder(); Watchdog.ThreadWatchdogInfo[] threads = Watchdog.GetThreadsInfo(); sb.Append(threads.Length + " threads are being tracked:" + Environment.NewLine); int timeNow = Environment.TickCount & Int32.MaxValue; sb.AppendFormat(reportFormat, "ID", "NAME", "LAST UPDATE (MS)", "LIFETIME (MS)", "PRIORITY", "STATE"); sb.Append(Environment.NewLine); foreach (Watchdog.ThreadWatchdogInfo twi in threads) { Thread t = twi.Thread; sb.AppendFormat( reportFormat, t.ManagedThreadId, t.Name, timeNow - twi.LastTick, timeNow - twi.FirstTick, t.Priority, t.ThreadState); sb.Append("\n"); } sb.Append(GetThreadPoolReport()); sb.Append("\n"); int totalThreads = Process.GetCurrentProcess().Threads.Count; if (totalThreads > 0) { sb.AppendFormat("Total process threads: {0}\n\n", totalThreads); } return(sb.ToString()); }