public int RunAndGetPerfTraceCount( Action<RunContext, IActivityMonitor, Random> a )
{
_perfTraceCount = 0;
CK.Monitoring.GrandOutputHandlers.FakeHandler.HandlePerfTraceCount = 0;
CK.Monitoring.GrandOutputHandlers.FakeHandler.TotalHandleCount = 0;
CK.Monitoring.GrandOutputHandlers.FakeHandler.SizeHandled = 0;
for( int i = 0; i < TotalThreadCount - _newThreadCount; ++i ) ThreadPool.QueueUserWorkItem( Run, a );
for( int i = 0; i < _newThreadCount; ++i ) new Thread( Run ).Start( a );
Barrier.SignalAndWait();
Barrier.SignalAndWait();
Assert.That( Barrier.ParticipantsRemaining, Is.EqualTo( Barrier.ParticipantCount ) );
return _perfTraceCount;
}