我有一个asp.net应用程序,在应用程序可以提供服务之前,它需要构建一个非常大的本地缓存.我想描述一下代码的特定部分.我的应用程序非常庞大,我不想完全分析它.我只想分析服务请求的代码路径.
我开始用来dotMemory跟踪我的应用内存使用情况.当我尝试附加到进程时,
对话框中两个复选框的profiler选项:1)收集每个第N个对象2)收集内存流量无法检查.
dotMemory尝试连接到实时进程时,为什么无法收集内存流量和堆栈跟踪信息?
我也尝试使用profiler API.
private void SomeMethod()
{
// Here goes your code
// ...
// Get a snapshot
if (MemoryProfiler.IsActive)
MemoryProfiler.Dump();
}
Run Code Online (Sandbox Code Playgroud)
我可以获得一个快照,但应用程序首先运行,然后在此之后关闭探查器.我也无法获得内存流量.
这是微软profiling api的限制。应在分析进程启动之前设置标志 COR_PRF_ENABLE_OBJECT_ALLOCATED。
如果您无法在 dotMemory 下启动应用程序,我建议您在“时间轴”模式下尝试 JetBrains dotTrace。它使用 ETW 提供程序来收集内存流量统计信息,并且可以帮助您解决问题。
ps 当您使用分析 api 时,如果您想收集堆栈跟踪,请不要忘记调用 MemoryProfiler.EnableAllocations。
编辑:由于版本 2021.3 dotMemory 还支持使用 Windows ETW 收集分配数据,因此即使将探查器附加到已运行的进程也可以获得它。
| 归档时间: |
|
| 查看次数: |
2740 次 |
| 最近记录: |