system.diagnostics跟踪如何影响.net性能?

时间:2010-01-14 15:37:45

标签: .net wcf performance trace

当我启用跟踪时,例如:

<system.diagnostics>
    <sources>
        <source name="System.ServiceModel" switchValue="Warning">
            <listeners>
                <add name="_listener0" />
            </listeners>
        </source>
    </sources>
    <sharedListeners>
        <add name="_listener0" type="System.Diagnostics.XmlWriterTraceListener"
         initializeData="logs\ServiceModel.svclog" traceOutputOptions="DateTime, ProcessId, ThreadId, Callstack" />
    </sharedListeners>
    <trace autoflush="true" />
</system.diagnostics>

这会对应用程序性能造成多大影响?

4 个答案:

答案 0 :(得分:2)

与大多数问题一样,答案是“它取决于”。您是否打开了跟踪WCF组件或使用自己的跟踪调用?是否附加了跟踪侦听器(例如,写入文件?还是打开DebugView工具来监视系统调试控制台)?您的代码是否在紧密循环中大量使用跟踪,还是仅在非递归函数等上进行更温和的跟踪?

您可以尝试查看,但对于大多数应用,您会注意到。

答案 1 :(得分:0)

  1. 确定您可以接受的跟踪性能开销。
  2. 衡量实际的性能开销。
  3. 如果2 <= 1那么笑脸就全面了。
  4. 如果2> 1然后更改您的跟踪(例如,使其更简洁,更改跟踪侦听器),然后返回到1.

答案 2 :(得分:0)

我有同样的问题,因为我正在考虑在多层系统上将前一个月的详细跟踪留在生产中的影响。

我所进行的测试表明它的性能不是太差。这是我正在进行的调用序列:

   UI Client (local pc)
      -> WCF service 1 (hosted locally)
         -> WCF service 2 (hosted locally)
            -> webservice hosted by business partner (offsite)

UI客户端以及WCF服务1和WCF服务2都使用System.Diagnostics.XmlWriterTraceListener进行跟踪。

设置为“ALL”,过程平均值 530ms 设置为“关闭”,流程平均 400ms

这是一个相当大的跳跃,但实际的处理过程是微不足道的,所以这几乎是所有序列化&amp;通信开销。我怀疑随着任务变得更加处理器密集,日志记录开销将减少百分比。

如果您正在进行大量呼叫并且需要性能,那么这种开销可能是不可接受的。但在我的情况下,呼叫很少,所以额外的小额开销将是值得的诊断潜力。

答案 3 :(得分:0)

一定要&lt;清除/&gt;如果您担心性能,则为默认侦听器。

Thoughts on System.Diagnostics Trace vs. Common.Logging