C>xperf -start ClrRundown -on "Microsoft-Windows-DotNETRuntime":0x118:5+"Microsoft-Windows-DotNETRuntimeRundown":0x118:5 -buffersize 512 -minbuffers 512 -maxbuffers 1024 -Buffering
C>xperf -Loggers ClrRundown
Logger Name : ClrRundown
Logger Id : 1e
Logger Thread Id : 0000000000000000
Buffer Size : 512
Maximum Buffers : 512
Minimum Buffers : 512
Number of Buffers : 512
Free Buffers : 504
Buffers Written : 0
Events Lost : **29**
Log Buffers Lost : 0
Real Time Buffers Lost: 0
Flush Timer : 0
Age Limit : 0
Log File Mode : Buffered StopOnHybridShutdown IndependentSession
Maximum File Size : 0
Log Filename :
Trace Flags : ".NET Common Language Runtime":0x118:0x5+"Microsoft-Windows-DotNETRuntimeRundown":0x118:0x5
我不关心少数丢失的事件,但是当打开这样的跟踪时,我总是从WPA得到警告。这让WPA的非常规用户感到困惑,他们担心自己做错了什么,从而阻碍了跟踪文件的加载。
有什么方法可以防止失去比赛机会吗?我唯一找到的另一个标志是-NoPerProcessorBuffering from xperf,这也没有帮助。将buffersize增加到8MB也没有改变任何事情。
// Lost event offset is taken from _TRACE_LOGFILE_HEADER32/64 which is the same for x64 and x86
const int LostEventOffset = 0x98;
private static void ResetLostEvents(string etlFile)
{
using (var file = File.OpenWrite(etlFile))
{
file.Seek(LostEventOffset, SeekOrigin.Begin);
using (BinaryWriter overwriter = new BinaryWriter(file))
{
overwriter.Write((int)0);
}
}
}