unity 内存优化,调整mono的gc频率,起到内存优化

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

**

你可能感兴趣的:(unity3d,内存)