Application.CaptureScreenshot()是否会泄漏内存? (IOS)

时间:2015-04-02 15:47:49

标签: ios unity3d screenshot

我已经创建了一个简单的iphone应用程序,其中一个按钮来自UI,当我点击它时只执行一行代码。这是代码:

public void CaptureScreenShot()
    {

        Application.CaptureScreenshot ("Screenshot.png");

    }

在我捕获一个屏幕截图后,内存增加了大约10 MB,然后只下降了7 MB

http://postimg.org/image/6r5tiaqjv/

当我拍摄第二张截图时,它上升了7 MB,但根本没有掉落,直到我翻转设备,然后它才会启动内存+ 3 MB

http://postimg.org/image/am4m74kbv/

然后,如果我想在行中拍摄2个截图,它会像+25 MB的起始内存一样上升,并在一段时间后下降2 MB

http://postimg.org/image/5yyk5cwyz/

即使我翻转设备,它也会降低2 MB,但它就像我启动设备时使用的内存的+ 20 MB。关键是,在拍摄至少一个屏幕截图后,我将永远无法获得回忆。 (我在开始时的记忆)

然后我决定尝试使用以下代码手动捕获屏幕截图:

public void TakeScreen()
    {
         // Timestamp returns the date, so each screenshot name would be unique
        string pngFile = Application.persistentDataPath+"/+Timestamp+".png";
        Texture2D texture = new Texture2D(Screen.width, Screen.height);
        texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
        texture.Apply();
        byte[] bytes = texture.EncodeToPNG();
        File.WriteAllBytes(pngFile,bytes);      
        DestroyObject( texture );
    }

内存使用情况与Application.CaptureScreenshot()相同; 有人可以解释一下,我做错了什么,或者有没有办法避免这种内存泄漏? 当我尝试从WebCamTexture()中保存图片时遇到同样的问题:

public void TakeSnap ()
    {
        // Timestamp returns the date, so each screenshot name would be unique
            string pngFile = Application.persistentDataPath+"/+Timestamp+".png";
        Texture2D texture = new Texture2D(wct.width, wct.height);
        texture.SetPixels32(wct.GetPixels32());
        texture.Apply ();
        var bytes = texture.EncodeToPNG();
        File.WriteAllBytes( pngFile,bytes);     
        DestroyObject( texture );

}

0 个答案:

没有答案