代码之家  ›  专栏  ›  技术社区  ›  mtkachenko

定义.NET中线程池的当前大小

  •  2
  • mtkachenko  · 技术社区  · 7 年前

    ThreadPool.GetAvailableThreads(out var workerAvailable, out var iocpAvailable);
    ThreadPool.GetMinThreads(out var workerMin, out var iocpMin);
    ThreadPool.GetMaxThreads(out var workerMax, out var iocpMax);
    
    var total = Process.GetCurrentProcess().Threads.Count;
    var workerCurrent = workerMax - workerAvailable;
    var iocpCurrent = iocpMax - iocpAvailable;
    var other = total - worker - iocp;
    

    worker , 3 iocp 和150 other

    我用这个做了个垃圾桶 procdump ClrMd ( ClrThread.IsThreadpoolCompletionPort ClrThread.IsThreadpoolWorker 属性)。最后我从垃圾堆里得到了一个不同的结果:99 工人 iocp公司 线程。

    为什么第一种方法返回如此奇怪的结果?

    升级版本: ThreadPool.GetAvailableThreads max minus currently active (not idle)

    0 回复  |  直到 7 年前