gpt4 book ai didi

profiling - 从 GCSampledObjectAllocationHigh 转换 TypeId

转载 作者:行者123 更新时间:2023-12-04 08:55:04 24 4
gpt4 key购买 nike

我有使用 Microsoft.Diagnostics.Tracing.TraceEvent 的代码NuGet 包,我写了以下代码:

using (var session = new TraceEventSession("mine"))
{
session.StopOnDispose = true;

session.EnableProvider(ClrTraceEventParser.ProviderGuid, TraceEventLevel.Verbose,
(ulong)ulong.MaxValue,//,ClrTraceEventParser.Keywords.GCSampledObjectAllocationHigh,
new TraceEventProviderOptions
{
StacksEnabled = true,
});


using (TraceLogEventSource traceLogSource = TraceLog.CreateFromTraceEventSession(session))
{
traceLogSource.Clr.GCSampledObjectAllocation += data =>
{
Console.WriteLine(data);
};

traceLogSource.Process();
}
}

这给了我看起来有点像这样的输出:
<Event 
MSec="10355.9688"
PID="7056"
PName=""
TID="11468"
EventName="GC/SampledObjectAllocation"
Address="0x000000C780036870"
TypeID="0x00007FFF1EC60BD8"
ObjectCountForTypeSample="1"
TotalSizeForTypeSample="28"
ClrInstanceID="9" />

很明显,分配了一个对象,其大小为 28 字节。
但是,我不知道如何将 TypeID 映射到类型名称。

看起来这会做我想要的:
traceLogSource.Clr.TypeBulkType += data =>
{
for (int i = 0; i < data.Count; i++)
{
var e = data.Values(i);
Console.WriteLine("{0} -> {1}", e.TypeID, e.TypeName);
}
};

但我不知道如何从我正在检查的进程中触发它的发送(这可能是一个运行时间很长的进程)。批量类型似乎只在进程开始时发送(仅用于观察),我找不到任何关于它们的文档。

任何想法如何做到这一点?

最佳答案

如果您查看 TraceEvent 中的 ClrTraceEventParser.Keywords(您会发现 GCHeapAndTypeNames 位)。当您打开它以及 AllocationHigh 位时,每次第一次注意到新类型时,它都应该沿着 BulkType 事件发送。

关于profiling - 从 GCSampledObjectAllocationHigh 转换 TypeId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32192615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com