ILRuntime限制

针对ILRuntime环境下的建议

  • 数学计算最好放到主工程

    计算慢的一匹

  • 少用{get;set;}这种索引器

    有额外GC

  • 多线程调用需要预热优化性能(非必须)

    参考ILRuntime文档

不能进行的骚操作

  • 不能使用可空类型修饰符(?)

    int? a = null;//这种在热更里已经支持了
    
  • 不能使用volatile关键词

    volatile int number;//这种在热更里也不行
    
  • 委托只能调用Invoke方法

    Delegate.BeginInvoke();//会出错
    Delegate.Invoke();//可以
    
  • LitJson反序列化限制(已经在v0.6.2修复并支持了)

    #region 本地工程
    public class Generic<T>{}
    public class Data{}
    #endregion
    
    #region 热更工程
    public class HotData{}
    ...
    public class Program
    {
      public void RunGame()
      {
          //序列化本地泛型类型,泛型参数为热更类型,是没问题的
          Generic<HotData> d = new Generic<HotData>();
          var json = JsonMapper.ToJson(d);//OK
    
          //序列化本地泛型类型,泛型参数为本地类型,是没问题的
          Generic<Data> d2 = new Generic<Data>();
          var json2 = JsonMapper.ToJson(d2);//OK
    
          //反序列化Generic<HotData> v0.6.2开始就支持了
          d = JsonMapper.ToObject<Generic<HotData>>(json);//v0.6.2开始就支持了
          
          //反序列化Generic<Data>可以的
          d2 = JsonMapper.ToObject<Generic<Data>>(json2);//OK
      }
    }
    #endregion
    
  • 跨域继承类型强转限制

    /*
    * 热更工程
    */
    public interface IClass{}
    
    public class MonoClass: MonoBehaviour, IClass{}
    public class NormalClass: IClass{}
    
    public class Program
    {
      public void RunGame()
      {
          List<IClass> lst = new List<IClass>();
          lst.Add(new NormalClass());//OK
          lst.Add(new MonoClass());//出错,因为Mono跨域继承了,无法强转类型
      }
    }
    
  • 欢迎提交更多ILRuntime的限制!

恭喜,JEngine入门篇已完成!