Зачем создавать TraceSource как статический?
Для всех примеров, которые я видел людей, создающих TraceSource для класса, он всегда определяется как статический
private static TraceSource traceSource = new TraceSource("TraceSourceApp");
Почему это закончилось?
private readonly TraceSource _traceSource = new TraceSource("TraceSourceApp");
Каковы преимущества / недостатки?
1 ответ
Решение
Они всегда должны быть статичными.
- Если вы проверяете исходный код MS, TraceSource помещается в статическую коллекцию. (Полагаю, исходный код Novel (Mono) такой же.
- Источник трассировки с тем же именем ведет себя одинаково во всей сборке, поэтому нет необходимости в отдельных.
- TraceSource создает ненужный мусор из-за его использования объектов WeakReference (или из-за статической области видимости... у статических вещей есть забавные правила сбора мусора): http://blog.perfectlytogether.com/2009/12/29/howto-solve-a-memory-leak-issue-caused-by-weakreference-objects/, вызванный-на-WeakReference-объекты /