【发布时间】:2015-12-02 21:28:24
【问题描述】:
根据 MSDN 文档,Write-event 仅支持 int 和 string 参数类型。我想将用户创建的 ct 传递给 Write-event,如何获得此功能?实现此功能的正确序列化程序是什么?
【问题讨论】:
-
Xml、Json、自定义等。正确的序列化程序取决于您在写出数据时打算如何处理数据,以及您打算如何读取它(人工或代码)。
标签: c# etw etw-eventsource
根据 MSDN 文档,Write-event 仅支持 int 和 string 参数类型。我想将用户创建的 ct 传递给 Write-event,如何获得此功能?实现此功能的正确序列化程序是什么?
【问题讨论】:
标签: c# etw etw-eventsource
有几种选择:
EventData 结构并传递给WriteEventCore(必须在unsafe 内部)-TPL 当前使用此方法。【讨论】:
在 Windows 10(也向后移植到 Win7/8.1)中,自 .Net 4.6 起支持 Rich Payload Data:
// define a ‘plain old data’ class
[EventData]
class SimpleData {
public string Name { get; set; }
public int Address { get; set; }
}
[EventSource(Name = "Samples-EventSourceDemos-RuntimeDemo")]
public sealed class RuntimeDemoEventSource : EventSource
{
// define the singleton instance of the event source
public static RuntimeDemoEventSource Log = new RuntimeDemoEventSource();
// Rich payloads only work when the self-describing format
private RuntimeDemoEventSource() : base(EventSourceSettings.EtwSelfDescribingEventFormat) { }
// define a new event.
public void LogSimpleData(string message, SimpleData data) { WriteEvent(1, message, data); }
}
RuntimeDemoEventSource.Log.LogSimpleData(
"testMessage",
new SimpleData() { Name = "aName", Address = 234 });
阅读博客和文档了解更多详情。
【讨论】: