Почему я продолжаю получать потерянные события, хотя я записываю в буферы памяти?
![enter image description here](https://i.stack.imgur.com/bbKTI.png)
Это не имеет смысла для меня. Как может получиться так, что не удаляются никакие буферы, кроме отдельных событий? Я отследил проблему до сеанса CLR Rundown, который всегда теряет некоторые события. Кажется, проблема в том, что у меня есть большое количество управляемых процессов (около 60), которые все одновременно пытаются отправить свои события в ETW.
Я могу повторить это с
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 от xperf, который также не помог. Увеличение размера буфера до 8 МБ также ничего не изменило.
Если нет способа записать данные без потерянных событий, есть ли дешевый и быстрый способ сброса счетчика потерянных событий в результате не слитого файла ETL?