首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从GCSampledObjectAllocationHigh转换TypeId

从GCSampledObjectAllocationHigh转换TypeId
EN

Stack Overflow用户
提问于 2015-08-25 06:15:21
回答 1查看 437关注 0票数 8

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

代码语言:javascript
复制
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();
    }
}

这给我的输出看起来有点像这样:

代码语言:javascript
复制
<Event 
    MSec="10355.9688" 
    PID="7056" 
    PName="" 
    TID="11468" 
    EventName="GC/SampledObjectAllocation" 
    Address="0x000000C780036870" 
    TypeID="0x00007FFF1EC60BD8" 
    ObjectCountForTypeSample="1" 
    TotalSizeForTypeSample="28" 
    ClrInstanceID="9" /> 

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

看起来这就是我想要的:

代码语言:javascript
复制
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);
    }
};

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

你知道怎么做吗?

EN

回答 1

Stack Overflow用户

发布于 2015-08-26 04:04:49

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32192615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档