0

我的项目有很多课程。每个类都使用 TraceSource 进行日志记录。我不想在记录时使用 TraceEventCache。基本上它的答案是我们可以告诉listner不要使用TraceOptions(CallStack,ProcessID等)编写TraceEventCache。这意味着 TraceSource 已经拥有 TraceEventCache。所以我的问题是 TraceSource 类的 TraceData 和 TraceEvent 方法是否为每次调用创建 TraceEventCache ?或者只是框架每个线程创建的单个对象,并且仅在 TraceSource 类中使用。

4

1 回答 1

2

您的问题取决于您认为 TraceSource 类是如何编写的。比推测更好的是,您可以查看参考源代码,包括MicrosoftMono 的

无论如何,在那里你可以看到每次调用 Trace(...)

TraceEventCache manager = new TraceEventCache(); 

据我所知,它表现得像缓存的唯一方式是调用堆栈(和其他一些)属性推迟确定它们的值,直到被调用,如果被调用两次,则从局部变量返回值。这是因为像 CallStack 这样的东西很慢。否则,TraceEventCache 只是无聊属性的集合。它不是像 ASP.NET 内部缓存那样的缓存。

为了提高性能,不要告诉任何跟踪侦听器输出调用堆栈或任何其他可能很慢的东西。

于 2014-02-14T17:36:25.493 回答