C# ETW分层活动ID仅在PerfView同时收集时工作

C# ETW分层活动ID仅在PerfView同时收集时工作,c#,etw,eventlog-source,perfview,activity-tracing,C#,Etw,Eventlog Source,Perfview,Activity Tracing,在尝试让ETW活动跟踪在我的项目中运行了相当长的一段时间但没有取得多大成功之后,我想我应该后退一步,看看微软提供的演示项目是否适合我。不幸的是,两者都不是。问题是,事件确实会显示在VS的诊断事件窗口中,但它们的常规GUID为ActivityID,而不是分层活动id,并且RelatedActivityID仅包含空值: 在尝试了几个小时后,我发现有一种方法可以让它工作:当我在收集数据时,当事件生成时,它们会突然得到一个他们应该得到的层次id,甚至设置了相关的活动id: 但是,当我停止使用Perf

在尝试让ETW活动跟踪在我的项目中运行了相当长的一段时间但没有取得多大成功之后,我想我应该后退一步,看看微软提供的演示项目是否适合我。不幸的是,两者都不是。问题是,事件确实会显示在VS的诊断事件窗口中,但它们的常规GUID为ActivityID,而不是分层活动id,并且RelatedActivityID仅包含空值:

在尝试了几个小时后,我发现有一种方法可以让它工作:当我在收集数据时,当事件生成时,它们会突然得到一个他们应该得到的层次id,甚至设置了相关的活动id:

但是,当我停止使用PerfViewer收集事件时,这些事件同样只有一个活动id的GUID,并且错过了相关的活动id

有人知道为什么会这样吗?这真的只有在外部应用程序监视事件时才起作用吗,或者我可以在VS中以某种方式让它起作用吗? 有没有人知道这是否适用于Azure诊断?我希望稍后收听Azure Diagnostics的事件,但如果没有以这种方式生成分层ID,它对我没有多大用处

多谢各位

PerfView通过为2e5dba47-a3d2-4d16-8ee0-6671ffdcd7b5(System.Threading.Tasks.TplEventSource)事件源设置关键字0x80(TasksFlowActivityId)来启用此功能,如前所述

我不认为可以从VS中的诊断事件为该事件源设置此关键字