1:下载对应unity版本的mono
2:查找mono文件mono-unity\mono\mini.c进行如下修改
可以在代码的#include之后加上:此段代码导出修改gc频率的方法个变量
typedef unsigned long GC_val;
extern GC_val GC_divisor;
GC_word GetGCDivisor();
int SetGCDivisor(GC_val divisor);
查找文件里面的mono_add_internal_call使用的地方在下面增加C#掉C的方法
mono_add_internal_call ("MonoGC::GetGCDivisor",
GetGCDivisor);
mono_add_internal_call ("MonoGC::SetGCDivisor",
SetGCDivisor);
增加对应的方法
GC_word GetGCDivisor()
{
return GC_divisor;
}
int SetGCDivisor(GC_word divisor)
{
if (divisor > 0 && divisor <= 64)
{
GC_divisor= divisor;
return 1;
}
return 0;
}
3:在unity里面增加C#文件
public class MonoGC
{
#if UNITY_ANDROID && !UNITY_EDITOR
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public extern static uint GetGCDivisor();
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public extern static int SetGCDivisor(uint divisor);
private static readonly string TAG = "MonoGC";
#endif
public static uint GetMonoGCDivisor()
{
#if UNITY_ANDROID && !UNITY_EDITOR
try
{
MethodInfo mi = typeof(MonoGC).GetMethod("GetGCDivisor");
if (mi != null)
{
return GetGCDivisor();
}
}
}
catch (Exception e)
{
}
#endif
return 0;
}
public static int SetMonoGCDivisor(uint divisor)
{
#if UNITY_ANDROID && !UNITY_EDITOR
try
{
MethodInfo mi = typeof(MonoGC).GetMethod("SetGCDivisor");
if (mi != null)
{
return SetGCDivisor(divisor);
}
}
catch (Exception e)
{
}
#endif
return 0;
}
}
**最后只需要在游戏启动时候对用不同的手机设置的合理的gc频率值就可以了,设置的数值越大频率越高,
注意过高的频率可能会引起间隔卡顿感,所有请合理的设置值,推荐值是16,unity引擎的默认值是3 | |
---|---|
**