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

CaptureFlags

перечисление

Описание

Флаги, указывающие, какого рода данные должны быть записаны в моментальном сниме.

Эти флаги обеспечивают контроль за тем, какие широкие категории данных должны быть включены в моментальный снимок. Для захватов общего назначения рекомендуется захват со всеми флагами или, по крайней мере, с CaptureFlags.ManagedObjects, CaptureFlags.NativeObjects и CaptureFlags.NativeAllocations.

Для более целенаправленных исследований, где размер моментального снима и скорость, с которой он был сделан, имеют важное значение, вы можете использовать более узкий набор флагов CaptureFlags. Например, если единственной целью является проверка размеров собственных объектов, то не устанавливать флаги CaptureFlags.ManagedObjects может значительно сократить время и размер захватов. Если подробные NativeAllocations, такие как те, которые используются собственными коллекциями, и графические размеры собственных объектов не имеют значения, то флаги CaptureFlags.NativeAllocations также могут быть оставлены.

Примечание: CaptureFlags.NativeAllocations и CaptureFlags.NativeAllocationSites не будут добавлять дополнительные данные в снимок, если сборка не поддерживает сбор информации о стеке вызовов, для чего в настоящее время требуется доступ к исходному коду.

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

public static class MemoryProfilerExample { 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 пакет, MemoryProfiler.TakeSnapshot.

Свойства

Свойство Описание
ManagedObjectsУказывает, что весь управляемый куча и все данные, необходимые для его анализа, должны быть записаны как часть снимка памяти.
NativeObjectsУказывает, что следует собирать сведения об основных объектах.
NativeAllocationsУказывает, что Основная Память, используемая любым Основным Выделением, сделанным Unity, должна быть захвачена.
NativeAllocationSitesУказывает расположение, в котором было выделено каждое основное выделение.
NativeStackTracesУказывает, что Символы Стека Вызовов для Основного Стека Вызовов каждого Выделения должны быть собраны.