zoukankan      html  css  js  c++  java
  • [原]unity3d ios平台内存优化(一)

    关于内存优化,人云亦云 各有己见。本文将通过设置Strpping Level ,减少内存使用。

    先看三幅图:

    1、没做任何优化,默认选项

    2、设置Stripping level 为 Use micro mscorlib; 设置 script call Optimization为Fast but no exceptions

        

    因为本demo用到jsonFX json解析器,牵扯到system.dll 里面的东西,所以程序直接崩掉。(Don't use anything that lives in System.dll or System.Xml.dll in your code. Those two are not compatible with micro mscorlib.)

    3、解决了以上bug,优化后的效果:   内存基本减少了8.5MB 左右

    如何解决第二部的残留问题呢:官方给了这么一个说法

    How to Deal with Stripping when Using Reflection

    Stripping heavily depends on static code analysis and sometimes it fails to do the job right, especially when dynamic features (like reflection) are used. In such cases some hinting what classes shouldn't be touched is needed. Unity iOS supports per project custom stripping black list. The process is simple:

    1. Create link.xml file and place it directly into Assets (project root) folder.

    2. link.xml sample structure is as follows:

    <linker>
           <assembly fullname="System.Web.Services">
                   <type fullname="System.Web.Services.Protocols.SoapTypeStubInfo" preserve="all"/>
                   <type fullname="System.Web.Services.Configuration.WebServicesConfigurationSectionHandler" preserve="all"/>
           </assembly>
           <assembly fullname="System">
                   <type fullname="System.Net.Configuration.WebRequestModuleHandler" preserve="all"/>
                   <type fullname="System.Net.HttpRequestCreator" preserve="all"/>
                   <type fullname="System.Net.FileWebRequestCreator" preserve="all"/>
           </assembly>
    </linker>

    结合本例:需要如下link.xml文件

    <linker>
           <assembly fullname="System">
                <type fullname="System.ComponentModel.TypeConverter" preserve="all"/>
                <type fullname="System.ComponentModel.ArrayConverter" preserve="all"/>
                <type fullname="System.ComponentModel.BaseNumberConverter" preserve="all"/>
                <type fullname="System.ComponentModel.BooleanConverter" preserve="all"/>
                <type fullname="System.ComponentModel.ByteConverter" preserve="all"/>
                <type fullname="System.ComponentModel.CharConverter" preserve="all"/>
                <type fullname="System.ComponentModel.CollectionConverter" preserve="all"/>
                <type fullname="System.ComponentModel.ComponentConverter" preserve="all"/>
                <type fullname="System.ComponentModel.CultureInfoConverter" preserve="all"/>
                <type fullname="System.ComponentModel.DateTimeConverter" preserve="all"/>
                <type fullname="System.ComponentModel.DecimalConverter" preserve="all"/>
                <type fullname="System.ComponentModel.DoubleConverter" preserve="all"/>
                <type fullname="System.ComponentModel.EnumConverter" preserve="all"/>
                <type fullname="System.ComponentModel.ExpandableObjectConverter" preserve="all"/>
                <type fullname="System.ComponentModel.Int16Converter" preserve="all"/>
                <type fullname="System.ComponentModel.Int32Converter" preserve="all"/>
                <type fullname="System.ComponentModel.Int64Converter" preserve="all"/>
                <type fullname="System.ComponentModel.NullableConverter" preserve="all"/>
                <type fullname="System.ComponentModel.SByteConverter" preserve="all"/>
                <type fullname="System.ComponentModel.SingleConverter" preserve="all"/>
                <type fullname="System.ComponentModel.StringConverter" preserve="all"/>
                <type fullname="System.ComponentModel.TimeSpanConverter" preserve="all"/>
                <type fullname="System.ComponentModel.UInt16Converter" preserve="all"/>
                <type fullname="System.ComponentModel.UInt32Converter" preserve="all"/>
                <type fullname="System.ComponentModel.UInt64Converter" preserve="all"/>
           </assembly>
    </linker>

    第二步的错误得出 JsonFX需要依赖System.dll中的类型转化函数,所以通过以上link文件 保留system.dll中的类型转换函数。

    另附:反射的link如下:

    <linker>
                <assembly fullname="mscorlib">
                       <type fullname="System.Reflection"preserve="all"/>
                       <type fullname="System.Security.Cryptography"preserve="all"/>
               </assembly>
    </linker>

    参考资料:http://www.rbcafe.com/Softwares/Unity/Documentation/Manual/iphone-playerSizeOptimization.html

  • 相关阅读:
    LeetCode数学系列(3)——快速幂算法(50题)
    LeetCode树系列(3)——200题岛屿数量
    Arrays.sort()详解
    图表示学习系列(1)——GCN学习笔记:第一部分,详细讲解GCN
    LeetCode动态规划系列(3)——编辑距离问题求解
    深度学习系列(9)——node2vec算法中的alias采样介绍
    LeetCode数学系列(2)——解决约瑟夫问题
    Java数据结构系列(4)——队列常用方法
    LeetCode树系列(1)——广度搜索应用,图的BFS
    LeetCode树系列(2)——深度搜索运用:LeetCode695题详解
  • 原文地址:https://www.cnblogs.com/U-tansuo/p/Unity_performance_optimization.html
Copyright © 2011-2022 走看看