I would create some perfmon counters and update them in thread pool threads. Then you can see how the application is used, and see how many threads are used at any given time, which, in turn, can help you configure the number. You can also log the time that was spent in each thread and count it so you can see the average wait time, this will help you determine if they were blocked, although I think the number of threads will also show it - d see a few completed right away if they are waiting for each other. Depends on the work you do.
I did this a few years ago for a web application, it was very informative for tuning application performance.
source share