我的项目有很多类。每个类都使用TraceSource进行日志记录。我不想在日志记录时使用TraceEventCache。基本上,答案是我们可以告诉listner不要使用TraceOptions (CallStack、ProcessID等)编写TraceEventCache。这意味着TraceSource已经有了TraceEventCache。所以我的问题是,TraceSource类的TraceData和TraceEvent方法会为每个调用创建TraceEventCache吗?或者只是由框架为每个线程创建的单个对象,仅用于TraceSource类。
发布于 2014-02-15 01:36:25
您的问题取决于您认为TraceSource类是如何编写的。比起猜测,你可以查看参考源代码,包括Microsoft和Mono's。
无论如何,在那里你可以看到每次调用Trace(...)时都会调用这个函数。
TraceEventCache manager = new TraceEventCache(); 据我所知,它行为像缓存的唯一方式是调用堆栈(和其他一些)属性推迟确定它们的值,直到被调用,如果被调用两次,则从局部变量返回值。这是因为像CallStack这样的东西很慢。否则,TraceEventCache只是一组乏味的属性。它不是像ASP.NET内部缓存那样的缓存。
为了提高性能,请不要让任何跟踪侦听器输出调用堆栈或任何其他可能很慢的事情。
https://stackoverflow.com/questions/21776857
复制相似问题