Определите TraceSource следующим образом, чтобы получить только один экземпляр:
private static readonly TraceSource _source = new TraceSource("mySrc");
Это гарантирует, что он будет создан до того, как какой-либо поток начнет его использовать, поэтому вам гарантирован только один экземпляр.
TraceSource по умолчанию имеет глобальную блокировку в Trace.UseGlobalLock. Это автоматически заблокирует вас вокруг всех слушателей трассировки. Если установлено значение false, он будет блокироваться для TraceListener, если слушатель не определен как потокобезопасный.
Трассировка может быть узким местом, если скорость записи «медленная» и объем трассировки велик.
Чтобы обеспечить максимальную скорость, вам нужно использовать как можно меньше слушателей трассировки, убедиться, что они потокобезопасны, и установить Trace.UseGlobalLock = false. Если у вас нет контроля над добавлением слушателей в ваш app.config, вы должны сохранить глобальную блокировку.