내 프로젝트에 많은 클래스가 있습니다. 각 클래스는 로깅을 위해 TraceSource를 사용합니다. 로깅하는 동안 TraceEventCache를 사용하고 싶지 않습니다. 기본적으로 우리는 Listener에게 TraceOptions (CallStack, ProcessID 등)를 사용하여 TraceEventCache를 작성하지 말라고 말할 수 있습니다. 즉, TraceSource에 이미 TraceEventCache가 있습니다. 그래서 내 질문은 TraceSource 클래스의 TraceData 및 TraceEvent 메서드는 모든 호출에 대해 TraceEventCache를 만들지? 아니면 스레드 당 프레임 워크에 의해 생성되고 TraceSource 클래스에서만 사용되는 단일 객체입니다.TraceEventCache 생성을 피하기 위해 TraceSource 사용자 정의
0
A
답변
1
귀하의 질문은 TraceSource 클래스 작성 방법에 달려 있습니다. 추측보다는 참조 소스 코드 (Microsoft 및 Mono's)를 확인할 수 있습니다.
어쨌든, 당신이 볼 수있는 거기에 각각의 호출은 지금까지 내가 말할 수있는
TraceEventCache manager = new TraceEventCache();
추적 (...)을 위해 호출되는 캐시가 있다는처럼, 유일한 방법은 그것을 동작합니다 호출 스택 (및 다른 몇 가지) 속성은 호출 될 때까지 값을 결정하지 않고 두 번 호출되면 로컬 변수에서 값을 반환합니다. 이것은 CallStack과 같은 것들이 느리기 때문입니다. 그렇지 않으면 TraceEventCache는 지루한 속성 모음 일뿐입니다. ASP.NET 내장 캐시와 같은 캐시는 아닙니다.
성능을 향상 시키려면 호출 수신기 또는 속도가 느려질 수있는 사항을 출력하도록 모든 추적 수신기에 지시하지 마십시오.