[轉]指令碼獲取資源記憶體和硬碟大小

weixin_34128411發表於2017-11-09

記憶體

使用Profiler可以檢視某個資源的記憶體佔用情況,但是必須啟動遊戲,並且待檢視的資源已經載入遊戲中。我希望的是不啟動遊戲,也能看到它的記憶體好做統計。

硬碟

由於unity中的資源壓縮格式記錄在meta中所以,在資料夾中看到的資源大小是不正確的。開啟unity需要選擇一個資源,比如Texture、然後在右側Inspector皮膚最下面可以看見它真實的硬碟佔用。這個資料我也希望那個可以指令碼取到,這樣我好做統計工具。

在Project檢視中先選擇一個Texture 然後點選menuitem (“1/1”)即可

    [MenuItem("1/1")]
    public static void menu()
    {
        Texture target = Selection.activeObject as Texture;
        var type = Types.GetType ("UnityEditor.TextureUtil", "UnityEditor.dll");
        MethodInfo methodInfo = type.GetMethod ("GetStorageMemorySize", BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public);
 
        Debug.Log("記憶體佔用:"+EditorUtility.FormatBytes(Profiler.GetRuntimeMemorySize(Selection.activeObject)));
        Debug.Log("硬碟佔用:"+EditorUtility.FormatBytes((int)methodInfo.Invoke(null,new object[]{target})));
    }

記憶體的話unity提供了API Profiler.GetRuntimMemorySize。

硬碟的話unity沒有提供,我檢視了它的原始碼需要通過反射可以獲取到。如果你還想檢視別的資源的硬碟佔用,自行檢視一下他editor下的程式碼,用上面這樣的程式碼反射獲取出來即可。

相關文章