I'm not sure what that means.
This means that threads spent on average 75% of their time, waiting for another thread to complete some work.
Does this mean that the application is suffering from a state of "live lock"?
May be!
To clarify for readers unfamiliar with the term: “dead end” is when two threads wait for each other to complete, and therefore they wait forever. A "live castle" is a situation where two streams try to avoid a deadlock, but because of their poor choice they spend most of their time waiting. Imagine, for example, a table with two people, a fork and a knife. Both want to pick up both dishes, use them, and then put them down. Suppose I pick up a knife and you lift the fork. If we both decided to wait for the other to put the dishes, we were at a standstill. If we both understand that we are at an impasse and I put the knife down and you put down the fork, and then I pick up the fork and you raise the knife, we are locked. We can repeat this process indefinitely; we both work to resolve the situation, but we do not communicate effectively enough to resolve it quickly.
However, I assume that you are not in a lockout situation. My guess is rather that you just have a huge fight for a small amount of critical resources that can only be accessed one thread at a time. An Ockham razor will indicate that you should accept a simple hypothesis - a lot of threads, using a scarce resource in turn, and not a complex hypothesis - a whole bunch of threads that try to tell each other "no, you go first."
There are ~ 30 + long threads bound to one AppDomain (if that matters), and some of the threads are very busy (while (true) example {_waitEvent.WaitOne (0); // do stuff}).
Sounds awful.
I understand that this is a rather vague question.
Yes it is.
How much is too much and why?
Well, suppose you tried to drive around the city, and you and every other driver in the city spent 75% of their time stopping at the traffic lights, waiting for other drivers. You tell me: this is too much, and why? Spending an hour on traffic to drive 15 minutes can be quite acceptable for some people and completely unacceptable for other people. Every time I take SR 520 at rush hour, I spend an hour in motion to travel a distance that should take 15 minutes; that was unacceptable to me, so now I take the bus.
Whether this lousy performance is acceptable to you and your customers or not, this is your call. Resolving performance issues is expensive. The question you should ask is what kind of profit you will get by taking on the costs of diagnosing and fixing the problem.
Is 75% Really Bad?
Your threads take up four times as much time as you need. It seems to me not too good.
Do I have too many threads?
You are almost certain, yes. 30 is a lot.
But this is a completely wrong technical question to ask in your situation. Ask: "Do I have too many threads?" it is like trying to fix a traffic jam by asking, "Are there too many cars in this city?" The correct question is: "Why are there so many traffic lights in this city where there can be motorways?" The problem is not threads; the problem is that they are waiting for each other, and not driving to their destinations without stopping.
Should I just start searching in other areas?
How should we know?