在`EventListener.EnableEvents`方法中输入`IDictionary <string,string =“”>`的最后一个参数的目的是什么?

时间:2015-07-06 08:52:28

标签: c# .net-4.5 slab

我试图弄清楚方法IDictionary<String, String>中的最后一个参数(EventListener.EnableEvents(EventSource, EventLevel, EventKeywords, IDictionary<String, String>))如何影响方法的行为。

我已经检查了MSDN documentation,但描述不清楚,没有示例如何使用它。什么是事件的参数以及它们如何在字典中指定?如果有人可以举一个例子,那就不仅仅是完美了。

2 个答案:

答案 0 :(得分:2)

EventListener.EnableEvents中的IDictionary<String, String>是命令参数,并传递给EventSource。基本上它是EventSource内置的可扩展性机制。例如,自定义事件源可以覆盖OnEventCommand并响应任意命令。

System.Diagnostics.Tracing.EventSource当前支持的命令参数是&#34; ActivitySamplingStartEvent&#34;,&#34; ActivitySampling&#34;和&#34; EtwSessionKeyword&#34;。

以下是关于如何使用语义记录应用程序块Sampling and filtering events文章的示例:

var listener = new ObservableEventListener();

listener.EnableEvents("MyCustomEventSource", 
         EventLevel.Informational, Keywords.None,
         new Dictionary<string, string> {
           { "ActivitySampling", "true" }
         });

答案 1 :(得分:1)

我找到的最接近答案的是this article on MSDN

  

您正在从应用程序记录事件,并且还希望从事件源中捕获未在应用程序中定义但与应用程序相关的事件。例如,您希望在应用程序收到请求时捕获ASP.NET引发的RequestStarted事件。但是,您不希望收集所有这些事件,因为这些其他源生成的卷将使您的日志记录存储不堪重负,或者使分析日志记录信息变得非常困难。要解决此问题,您只需收集事件的样本,而不是所有事件的样本,并且还能够过滤收集事件的过程。