为什么dotmemory在尝试连接到实时进程时无法收集内存流量和堆栈跟踪信息

时间:2014-12-15 12:00:10

标签: memory profiling

我有一个asp.net应用程序,在应用程序可以提供服务之前,它需要构建一个非常大的本地缓存。我想描述一下代码的特定部分。我的应用程序非常庞大,我不想完全分析它。我只想分析为请求提供服务的代码路径。

我开始使用dotMemory来跟踪我的应用内存使用情况。当我尝试附加到流程时,

对话框中两个复选框的分析器选项:1)收集每个第N个对象2)收集内存流量无法检查。

为什么dotMemory在尝试附加到实时流程时无法收集内存流量和堆栈跟踪信息?

我也尝试使用探查器API。

private void SomeMethod()
{
    // Here goes your code
    // ...

    // Get a snapshot
    if (MemoryProfiler.IsActive)
        MemoryProfiler.Dump();
}

我可以获得快照,但应用程序首先运行,然后在此之后关闭探查器。我也无法获得内存流量。

1 个答案:

答案 0 :(得分:4)

这是Microsoft profiling api的限制。应在profiled进程开始之前设置COR_PRF_ENABLE_OBJECT_ALLOCATED标志。

如果您无法在dotMemory下启动应用程序,我建议您在“时间轴”模式下尝试使用JetBrains dotTrace。它使用ETW提供程序来收集内存流量统计信息,并可以帮助您解决问题。

p.s当你使用profiling api时,如果你想收集堆栈跟踪,别忘了调用MemoryProfiler.EnableAllocations。