Unity 6.3
0 онлайн 7 гостей 3 в системе
Вход

MemoryProfiler

класс в Unity.Profiling.Memory

Выполнено в:UnityEngine.CoreModule

Описание

Профиль памяти API обеспечивает функциональность для создания снимков памяти или добавления метаданных к ним.

API доступен во время выполнения. Когда вы вызываете это API чтобы сделать снимки, он хранит снимки локально на хранилище устройства Игрок работает на, или поток его, если Unity Editor прикрепляется через PlayerConnection. При вызове из Редактора, он захватывает данные от Редактора или подключенного Игрока, в зависимости от текущей цели PlayerConnection. Вы также можете установить текущую цель Player Connection через Редактор с помощью Profiler Окно, Память Profiler или Окно консоли. Вы можете открыть полученные файлы снимков с помощью Память Profiler, если они сохранены с помощью .snap расширение файла.

Слушатели MemoryProfiler.CreatingMetadata событие будет уведомлено только в Проигрывателе или Редакторе, из которого был сделан снимок.

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

public static class MemoryProfilerExample { [RuntimeInitializeOnLoadMethod] public static void Initialize() { MemoryProfiler.CreatingMetadata += CreateMetadata; }

static void CreateMetadata(MemorySnapshotMetadata metadata) { metadata.Description = $"This Memory Snapshot capture started at {DateTime.Now}."; }

public static IEnumerator TakeSnapshot() { var snapshotFileName = "SnapshotName.tmpsnap"; // Make sure the file does not exist, e.g. as a left over of a failed previous attempt to take a snapshot. if (File.Exists(snapshotFileName)) File.Delete(snapshotFileName);

bool snapshotFinished = false; string resultingSnapshotPath = null; MemoryProfiler.TakeSnapshot(snapshotFileName, (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 finalPath = resultingSnapshotPath.Replace(".tmpsnap", ".snap"); // Remove any pre-existing file first. if (File.Exists(finalPath)) File.Delete(finalPath);

// Now that writing to the file has succesfully completed, rename the file to the .snap extension to denote that the Memory Profiler can open it. 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. } } }

Дополнительные ресурсы: Память Profiler пакет, PlayerConnection, EditorConnection, PlayerConnectionGUIUtility.

Статические методы

Метод Описание
TakeSnapshotВызывает захват снимка памяти, чтобы получить снимок состояния памяти, который можно открыть и разобрать в Memory Profiler.
TakeTempSnapshotВызывается захват снимка памяти в папку Application.temporaryCachePath.

Мероприятия

Мероприятие Описание
CreatingMetadataСобытие метаданных, на которое могут подписываться методы сбора.