我已经为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
我这样做使用System.Diagnostics.StackTrace和计数StackFrames。
现在问题是:有没有更有效的方法来做到这一点?我只需要确定(相对)调用堆栈深度,即当前深度加上或减去上次调用我的日志封装器的时间。 (请注意,我实际上并没有使用StackFrame对象 - 否则我会得到方法名称。)
我希望能够使用一些简单的高性能方式来查询调用堆栈深度或堆栈使用情况。
感谢您的回答。我可能是错的,但我假设当你创建一个StackTrace对象时,所有的StackFrame对象也被创建。你说这不是这种情况? – RenniePet 2011-05-14 01:56:44
新的StackFrame()对象并不昂贵,如果你不使用它,但如果你真的需要顶级性能,请阅读一些扭曲Reflection.Emit的东西:http://ayende.com/blog/3879/reducing-成本 - 收益 - 追踪 – 2011-05-14 02:09:17
哇,我印象深刻。也感觉像我的能力不了解你做了什么。稍后当我有更多时间时,我会尽量分析和理解它。但是“Func