0

我正在尝试使用 dot memory api 来分析我的特定代码。当我调用 dump() 方法时,我的期望是拍摄快照并将其保存到目录。

我试图在执行我的代码之前和通过调用 dump() 方法执行我的代码之后在这里拍摄两个快照。

是否可以在同一个输出文件中创建两个快照,就像我们选择从独立点内存中进行操作一样?

欣赏你的建议。以下是代码片段

SelfAttach.Attach(new SaveSnapshotProfilingConfig
{
   ProfilingControlKind = ProfilingControlKind.Api,
   SaveDir = "D:\\SelfProfiling",
   RedistDir = "D:\\Softwares\\JetBrains.Profiler.SelfSdk.2017.2.2",
   ProfilingType = ProfilingType.Memory,
   ListFile = "D:\\snapshot_list.xml" 
});

while (SelfAttach.State != SelfApiState.Active)
{
     Thread.Sleep(250);  // wait until API starts
}

if (MemoryProfiler.IsActive)
{
   MemoryProfiler.Dump();
   MyMethodTobeProfiled();
   MemoryProfiler.Dump();
}

if (MemoryProfiler.CanDetach)
   MemoryProfiler.Detach();
4

2 回答 2

1

Is it possible to create the both snapshot in the same output file as we option to do it from Stand alone dot memory?

A snapshot is normally a bunch of files. .dmw is an archive of a snapshot. This is the design now. The reason is to ability to start sending a snapshot immediately to a remote host. This is the R# requirement.

于 2017-12-05T17:58:18.343 回答
1

我想您可以使用dotMemory 命令行分析器而不是“自我分析”API 来满足您的需求。

启动 dotMemory 命令行分析器。确定分析器已附加到您的应用程序,因为您需要分析 dotMemory CLT 进程输出。

所以,得到你需要的伪代码

dotMemory.exe attach --service-output --use-api "your_app_PID"

// then the message will be printed to output
// ##dotMemory["connected",{"pid":your_app_PID,"name":"your_app_NAME.exe"}]
wait for this message

// the rest of your code remains the same
// and you need only JetBrains.Profiler.Windows.Api.dll
// no more need JetBrains.Profiler.Windows.SelfApi.dll
if (MemoryProfiler.IsActive)
{
    MemoryProfiler.Dump();
    MyMethodTobeProfiled();
    MemoryProfiler.Dump();
}

if (MemoryProfiler.CanDetach)
   MemoryProfiler.Detach();

在此处阅读有关 dotMemory 命令行分析器的更多信息

于 2017-12-05T17:34:21.747 回答