WP8 WriteableBitmap构造函数保留了大量内存

时间:2013-10-13 21:03:36

标签: c# wpf memory-management windows-phone-8 writeablebitmap

我正在尝试使用WriteableBitmap对象,因为我需要它来旋转图像并将图像保存到我的应用程序的独立存储中。

问题是,它使用了如此多的内存,最终会导致内存不足异常。

以下是我的应用内存使用情况的图片,图片链接为here,以便更好地查看。

Memory Chart

这是我使用WriteableBitmap的实例:

        WriteableBitmap picture = new WriteableBitmap(PictureCanvas, null);

        using (var memoryStream = new MemoryStream())
        {
            picture.SaveJpeg(memoryStream, picture.PixelWidth, picture.PixelHeight, 0, 100);

            using (var myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
            {
                using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(Globals.OVERLAY_FILE_NAME, FileMode.Create, myIsolatedStorage))
                {
                    fileStream.Write(memoryStream.ToArray(), 0, memoryStream.ToArray().Length);
                    fileStream.Close();
                }
            }
        }

        picture = picture.Crop(0, 0, 1, 1);

我尝试裁剪图像以减少占用内存,但这没有任何作用。

我正在使用WriteableBitmap扩展库here,并在首页提到了Dispose()方法,但我没有在我的应用程序中看到它。

如果有人可以告诉我如何解决这个问题或者指点我可以找到一个可能的解决方案,那就太棒了!

1 个答案:

答案 0 :(得分:1)

我有a similar issue但仍在调查,但至少我可以给出一个小提示:如果可能的话,摆脱MemoryStream并直接写入fileStream:

    WriteableBitmap picture = new WriteableBitmap(PictureCanvas, null);
    using (var myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
    using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(Globals.OVERLAY_FILE_NAME, FileMode.Create, myIsolatedStorage))
    {
        picture.SaveJpeg(fileStream, picture.PixelWidth, picture.PixelHeight, 0, 100)
    }

这应该会给你带来一些回忆。