TraceProcessor 线程安全吗?

问题描述 投票:1回答:1

当我试图通过以下方式并行解析多个ETL文件时

 using (ITraceProcessor processor = TraceProcessor.Create(myEtlFile, new TraceProcessorSettings
 {
   AllowLostEvents = true,
 }))

我得到了这个异常

System.Runtime.InteropServices.InvalidComObjectException: COM object that has been separated from its underlying RCW cannot be used. The COM object was released while it was still in use on another thread.
Stack Trace: 
  InterfaceMarshaler.ConvertToManaged(IntPtr pUnk, IntPtr itfMT, IntPtr classMT, Int32 flags)
  AddInManagerAdapter.Create(String toolkitPath)
  ToolkitTraceProcessingEngine.Create(String path, ITraceProcessorSettings settings, ITraceProcessorSettings & effectiveSettings)
  TraceProcessor.Create(String path, ITraceProcessorSettings settings)

这是一个bug还是一个 "已知 "的限制?

etw .net-traceprocessing
1个回答
1
投票

这是一个已知的限制。考虑到底层本地代码交互的工作方式,不幸的是,一次只能创建一个跟踪处理器。

一般来说,TraceProcessor只支持单线程访问,即使是静态方法。一些消费者已经找到了多线程代码可以工作的地方,但这并没有经过测试保证--我们一般没有添加锁或做任何事情来实现安全并发访问。

© www.soinside.com 2019 - 2024. All rights reserved.