Version: 2022.3
LanguageEnglish
  • C#

MemoryProfiler.TakeTempSnapshot

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Submission failed

For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

Declaration

public static void TakeTempSnapshot(Action<string,bool> finishCallback, Unity.Profiling.Memory.CaptureFlags captureFlags);

Parameters

finishCallback Event that is fired once the memory snapshot has finished the process of capturing data.
captureFlags Flag mask defining the content of the memory snapshot.

Description

Triggers a memory snapshot capture to the Application.temporaryCachePath folder.

Internally MemoryProfiler.TakeSnapshot is called with the destination path set to the "<Application.temporaryCachePath>/<projectName>.snap".

using System.Collections;
using System.IO;
using Unity.Profiling.Memory;
using UnityEngine;

public static class MemoryProfilerExample { public static IEnumerator TakeSnapshot() { bool snapshotFinished = false; string resultingSnapshotPath = null; MemoryProfiler.TakeTempSnapshot((filePath, success) => { snapshotFinished = true; if (success) { resultingSnapshotPath = Path.GetFullPath(filePath); Debug.Log($"Snapshot captured and stored at {resultingSnapshotPath}."); } else { Debug.LogError("Failed to take a snapshot."); } }, CaptureFlags.ManagedObjects | CaptureFlags.NativeObjects | CaptureFlags.NativeAllocations);

while (!snapshotFinished) { yield return null; }

if (resultingSnapshotPath != null && File.Exists(resultingSnapshotPath)) { var fileName = Path.GetFileName(resultingSnapshotPath); // Ensure a unique file name to move this file to. var finalPath = Path.Combine(Application.persistentDataPath, "DateTime.Now.Ticks" + fileName);

// Remove any pre-existing file first. if (File.Exists(finalPath)) File.Delete(finalPath);

// Move the file out of the temporary cache to somewhere more permanent. File.Move(resultingSnapshotPath, finalPath);

// If you don't have access to the Player's file system you could also upload the file to an end-point that is accessible to you here. } } }