나는 Log4net에 대한 래퍼를 만들었으며 (NLog를 선호 할 수도 있지만 아직 결정하지는 못했음) 구조체를 호출하기 위해 기록 된 메시지 결과를 들여 씁니다. 예를 들면 :C# 로깅의 경우 최소한의 오버 헤드로 호출 스택 깊이를 얻으려면 어떻게해야합니까?
2011-04-03 00:20:30,271 [CT] DEBUG - Merlinia.ProcessManager.CentralThread.ProcessAdminCommand - ProcStart - User Info Repository
2011-04-03 00:20:30,271 [CT] DEBUG - Merlinia.ProcessManager.CentralThread.StartOneProcess - User Info Repository
2011-04-03 00:20:30,411 [CT] DEBUG - Merlinia.ProcessManager.CentralThread.SetProcessStatus - Process = User Info Repository, status = ProcStarting
2011-04-03 00:20:30,411 [CT] DEBUG - Merlinia.ProcessManager.CentralThread.SendProcessStatusInfo
2011-04-03 00:20:30,411 [CT] DEBUG - Merlinia.CommonClasses.MhlAdminLayer.SendToAllAdministrators - ProcessTable
2011-04-03 00:20:30,411 [CT] DEBUG - Merlinia.CommonClasses.MReflection.CopyToBinary
2011-04-03 00:20:30,411 [CT] DEBUG - Merlinia.CommonClasses.MReflection.CopyToBinary - False
2011-04-03 00:20:30,411 [CT] DEBUG - Merlinia.CommonClasses.MhlBasicLayer.SendToAllConnections - 228 - True - False
2011-04-03 00:20:30,411 [CT] DEBUG - Merlinia.CommonClasses.MmlNonThreaded.SendObject - 228
2011-04-03 00:20:30,411 [CT] DEBUG - Merlinia.CommonClasses.MllTcpSocket.SendMessage - 228 - True
2011-04-03 00:20:32,174 [10] DEBUG - Merlinia.CommonClasses.MReflection.CreateFromBinary
2011-04-03 00:20:32,174 [10] DEBUG - Merlinia.CommonClasses.MReflection.CopyFromBinary - Bytes = 71
2011-04-03 00:20:32,174 [CT] DEBUG - Merlinia.ProcessManager.CentralThread.MessagingCallback - User Info Repository - ProcessInfoAndRequests
2011-04-03 00:20:32,174 [CT] DEBUG - Merlinia.ProcessManager.CentralThread.ProcessProcessInfoAndRequests - User Info Repository
I이 System.Diagnostics.StackTrace를 사용하여 계산 StackFrames을한다.
여기에 질문이 있습니다. 더 효율적인 방법이 있습니까? 난 (상대적) 호출 스택 깊이를 결정할 필요가 있습니다. 즉, 현재 로깅 래퍼가 호출 된 마지막 시간을 더한 값 또는 빼기 값입니다. (실제로 StackFrame 객체를 사용하지 않습니다. 그렇지 않으면 메소드 이름을 얻습니다.)
호출 스택 깊이 또는 스택 사용을 쿼리하는 몇 가지 간단한 고성능 방법이 필요합니다.
답장을 보내 주셔서 감사합니다. 나는 틀릴 수도 있지만 StackTrace 객체를 만들면 모든 StackFrame 객체도 생성된다고 가정합니다. 이 사건이 아니라고 말하는거야? – RenniePet
새로운 StackFrame() 객체는 비싸지 만 사용하지 않으면 성능이 정말로 필요하다면 뒤틀린 Reflection.Emit 자료를 읽으십시오 : http://ayende.com/blog/3879/reducing- Get-a-Stack-Trace의 비용 –
와우, 감동했습니다. 또한 내 능력과 같은 느낌은 당신이 한 일을 이해하지 못하는 것입니다. 나는 나중에 시간이있을 때 그것을 분석하고 이해하려고 노력할 것이다. 그러나 "Func