源战役客户端
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 

74 linhas
2.6 KiB

using System.IO;
using UnityEngine;
using UnityEditor;
using UnityEditor.MemoryProfiler;
public static class PackedMemorySnapshotUtility
{
public static void SaveToFile(PackedMemorySnapshot snapshot)
{
var filePath = EditorUtility.SaveFilePanel("Save Snapshot", null, "MemorySnapshot", "memsnap2");
if(string.IsNullOrEmpty(filePath))
return;
SaveToFile(filePath, snapshot);
}
static void SaveToFile(string filePath, PackedMemorySnapshot snapshot)
{
// Saving snapshots using JsonUtility, instead of BinaryFormatter, is significantly faster.
// I cancelled saving a memory snapshot that is saving using BinaryFormatter after 24 hours.
// Saving the same memory snapshot using JsonUtility.ToJson took 20 seconds only.
UnityEngine.Profiling.Profiler.BeginSample("PackedMemorySnapshotUtility.SaveToFile");
var json = JsonUtility.ToJson(snapshot);
File.WriteAllText(filePath, json);
UnityEngine.Profiling.Profiler.EndSample();
}
public static PackedMemorySnapshot LoadFromFile()
{
var filePath = EditorUtility.OpenFilePanelWithFilters("Load Snapshot", null, new[] { "Snapshots", "memsnap2,memsnap" });
if(string.IsNullOrEmpty(filePath))
return null;
return LoadFromFile(filePath);
}
static PackedMemorySnapshot LoadFromFile(string filePath)
{
PackedMemorySnapshot result = null;
string fileExtension = Path.GetExtension(filePath);
if(string.Equals(fileExtension, ".memsnap2", System.StringComparison.OrdinalIgnoreCase))
{
UnityEngine.Profiling.Profiler.BeginSample("PackedMemorySnapshotUtility.LoadFromFile(json)");
var json = File.ReadAllText(filePath);
result = JsonUtility.FromJson<PackedMemorySnapshot>(json);
UnityEngine.Profiling.Profiler.EndSample();
}
else if(string.Equals(fileExtension, ".memsnap", System.StringComparison.OrdinalIgnoreCase))
{
UnityEngine.Profiling.Profiler.BeginSample("PackedMemorySnapshotUtility.LoadFromFile(binary)");
var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
using(Stream stream = File.Open(filePath, FileMode.Open))
{
result = binaryFormatter.Deserialize(stream) as PackedMemorySnapshot;
}
UnityEngine.Profiling.Profiler.EndSample();
}
else
{
Debug.LogErrorFormat("MemoryProfiler: Unrecognized memory snapshot format '{0}'.", filePath);
}
return result;
}
}