当我启用跟踪时,例如:
<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>
这会对应用程序性能造成多大影响?
答案 0 :(得分:2)
与大多数问题一样,答案是“它取决于”。您是否打开了跟踪WCF组件或使用自己的跟踪调用?是否附加了跟踪侦听器(例如,写入文件?还是打开DebugView工具来监视系统调试控制台)?您的代码是否在紧密循环中大量使用跟踪,还是仅在非递归函数等上进行更温和的跟踪?
您可以尝试查看,但对于大多数应用,您会注意到。
答案 1 :(得分:0)
答案 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;如果您担心性能,则为默认侦听器。