我的项目有很多课程。每个类都使用TraceSource进行日志记录。我不想在记录时使用TraceEventCache。基本上答案就是我们可以告诉列表器不要使用TraceOptions(CallStack,ProcessID等)编写TraceEventCache。这意味着TraceSource已经有了TraceEventCache。所以我的问题是TraceSource类的TraceData和TraceEvent方法是否为每次调用创建了TraceEventCache?或者只是每个线程框架创建的单个对象,并且只在TraceSource类中使用。
答案 0 :(得分:2)
您的问题取决于您对TraceSource类的编写方式。优于推测,您可以查看参考源代码,Microsoft和Mono's。
无论如何,在那里你可以看到每次调用Trace(...)
都会调用它TraceEventCache manager = new TraceEventCache();
据我所知,其行为类似于缓存的唯一方式是调用堆栈(和其他一些)属性在调用之前推迟确定它们的值,如果调用两次,则从局部变量返回值。这是因为像CallStack这样的东西很慢。否则,TraceEventCache只是一个无聊属性的集合。它不是像ASP.NET固有缓存那样的缓存。
为了提高性能,请不要告诉任何跟踪侦听器输出调用堆栈或其他可能很慢的东西。