有些特定情况下程序需要长时间运行导致内存碎片和垃圾过多,这个时候就需要进行定时对内存进行清理
在程序中的单例脚本或GameManager脚本内添加该代码片段(确保该脚本不会被删除或者回收),下面展示在GameManager脚本下的
代码
.
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using UnityEngine;
public class GameManager : MonoBehaviour
{
public static GameManager instance;
private void Awake()
{
instance = this;
}
// Start is called before the first frame update
void Start()
{
InvokeRepeating("ClearMemory", 60.0f, 28800.0f);//首次启动1分钟后进行内存清理,之后每隔8小时调用内存清理
}
[DllImport("psapi.dll")]
static extern int EmptyWorkingSet(IntPtr hwProc);
public void ClearMemory()
{
//可以将需要定时释放或删除的功能写在一起
GC.Collect();
GC.WaitForPendingFinalizers();
Process[] processes = Process.GetProcesses();
foreach (Process process in processes)
{
//以下系统进程没有权限,所以跳过,防止出错影响效率。
if ((process.ProcessName == "System") && (process.ProcessName == "Idle"))
continue;
try
{
EmptyWorkingSet(process.Handle);
}
catch
{
}
}
}
}