我有一个asp.net应用程序,在应用程序可以提供服务之前,它需要构建一个非常大的本地缓存。我想描述一下代码的特定部分。我的应用程序非常庞大,我不想完全分析它。我只想分析为请求提供服务的代码路径。
我开始使用dotMemory
来跟踪我的应用内存使用情况。当我尝试附加到流程时,
对话框中两个复选框的分析器选项:1)收集每个第N个对象2)收集内存流量无法检查。
为什么dotMemory
在尝试附加到实时流程时无法收集内存流量和堆栈跟踪信息?
我也尝试使用探查器API。
private void SomeMethod()
{
// Here goes your code
// ...
// Get a snapshot
if (MemoryProfiler.IsActive)
MemoryProfiler.Dump();
}
我可以获得快照,但应用程序首先运行,然后在此之后关闭探查器。我也无法获得内存流量。
答案 0 :(得分:4)
这是Microsoft profiling api的限制。应在profiled进程开始之前设置COR_PRF_ENABLE_OBJECT_ALLOCATED标志。
如果您无法在dotMemory下启动应用程序,我建议您在“时间轴”模式下尝试使用JetBrains dotTrace。它使用ETW提供程序来收集内存流量统计信息,并可以帮助您解决问题。
p.s当你使用profiling api时,如果你想收集堆栈跟踪,别忘了调用MemoryProfiler.EnableAllocations。