he creado un contenedor para Log4net (que yo pueda estar disminuyendo en favor de Nlog; no he decidido todavía), y sangrar los mensajes registrados como resultado de dar una idea de llamar a la estructura. Por ejemplo:Para el registro de C#, ¿cómo obtengo la profundidad de la pila de llamadas con una sobrecarga mínima?
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
que hacerlo utilizando System.Diagnostics.StackTrace y contando StackFrames. hay alguna forma más eficiente de hacer esto:
Ahora aquí es la pregunta? Solo necesito determinar la profundidad (relativa) de la pila de llamadas, es decir, es la profundidad actual más o menos de lo que fue la última vez que se llamó a mi contenedor de registro. (Tenga en cuenta que en realidad no uso los objetos StackFrame - obtengo los nombres del método de otra manera.)
Estoy esperando alguna manera simple de alto rendimiento de consultar la profundidad de la pila de llamadas o el uso de la pila.
Gracias por su respuesta. Puede que esté equivocado, pero supongo que cuando crea un objeto StackTrace, también se crean todos los objetos de StackFrame. ¿Estás diciendo que este no es el caso? – RenniePet
nueva StackFrame() objeto no es tan caro si no lo uso, pero si realmente necesita el máximo rendimiento, sigue leyendo para algunos trenzado cosas Reflection.Emit: http://ayende.com/blog/3879/reducing- the-cost-of-getting-a-stack-trace –
Guau, estoy impresionado. También siento que mis habilidades no están a la altura de lo que has hecho. Trataré de analizarlo y entenderlo más tarde cuando tenga más tiempo. Pero, ¿qué significa "Func