如果JIT编译导致运行时性能下降,实际上有可能在任何时刻通过反射强制进行方法的JIT编译。反射是C#的一项特性,它允许代码库探查自身类型信息、方法、值和元数据。使用反射是一个非常昂贵的过程,应该避免在运行时使用,最好在初始化或者其他加载时间使用。否则容易导致严重的CPU峰值和游戏卡顿。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*
* Author:W
* JIT C#反射
*/
public class JIT_Test : MonoBehaviour {
// Use this for initialization
void Start () {
//针对Public方法
var method = typeof(JIT_Test).GetMethod("Test1");
if (method != null)
{
method.MethodHandle.GetFunctionPointer();
}
//针对Private、Protected方法
var method2 = typeof(JIT_Test).GetMethod("Test2",System.Reflection.BindingFlags.NonPublic|
System.Reflection.BindingFlags.Instance);
if (method2 != null)
{
method2.MethodHandle.GetFunctionPointer();
}
}
public void Test1()
{
Debug.Log("Test1");
}
private void Test2()
{
Debug.Log("Test2");
}
}