diff --git a/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.cs b/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.cs index ab6b6cfde..252df4955 100644 --- a/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.cs +++ b/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.cs @@ -249,6 +249,7 @@ namespace ProcessHacker { t.Enabled = false; action(); + t.Dispose(); }); t.Interval = delay; diff --git a/trunk/ProcessHacker/Program/Program.cs b/trunk/ProcessHacker/Program/Program.cs index 211edf8b8..cf62cd1f5 100644 --- a/trunk/ProcessHacker/Program/Program.cs +++ b/trunk/ProcessHacker/Program/Program.cs @@ -179,7 +179,9 @@ namespace ProcessHacker Application.Exit(); } - + + ThreadPool.SetMinThreads(0, 0); + ThreadPool.SetMaxThreads(2, 2); WorkQueue.GlobalWorkQueue.MaxWorkerThreads = 3; Win32.CreateMutex(0, false, "Global\\ProcessHackerMutex"); @@ -773,12 +775,23 @@ namespace ProcessHacker info.AppendLine("KProcessHacker: " + KProcessHacker.Instance.Features.ToString()); info.AppendLine(); - info.AppendLine("GLOBAL THREAD POOL"); + info.AppendLine("PROCESS HACKER THREAD POOL"); info.AppendLine("Worker thread limit: " + WorkQueue.GlobalWorkQueue.MaxWorkerThreads.ToString()); info.AppendLine("Busy worker threads: " + WorkQueue.GlobalWorkQueue.BusyCount.ToString()); info.AppendLine("Total worker threads: " + WorkQueue.GlobalWorkQueue.WorkerCount.ToString()); info.AppendLine("Queued work items: " + WorkQueue.GlobalWorkQueue.QueuedCount.ToString()); + info.AppendLine(); + info.AppendLine("CLR THREAD POOL"); + int maxWt, maxIoc, minWt, minIoc, wt, ioc; + ThreadPool.GetAvailableThreads(out wt, out ioc); + ThreadPool.GetMinThreads(out minWt, out minIoc); + ThreadPool.GetMaxThreads(out maxWt, out maxIoc); + info.AppendLine("Worker threads: " + (maxWt - wt).ToString() + " current, " + + maxWt.ToString() + " max, " + minWt.ToString() + " min"); + info.AppendLine("I/O completion threads: " + (maxIoc - ioc).ToString() + " current, " + + maxIoc.ToString() + " max, " + minIoc.ToString() + " min"); + info.AppendLine(); info.AppendLine("PRIMARY SHARED THREAD PROVIDER"); info.AppendLine("Count: " + SharedThreadProvider.Count.ToString());