harili
harili

Reputation: 477

Outofmemory when I'm loading image with thumbnailload

When I'm trying to load image from my folder, I'm getting an : OutOfMemory

I've got the following error when I've use MemoryStream :

 public ImageSource ThumbnailLoadAsync()
        {
            var imageTemp = File.Exists(Image) ? Image : string.Format("{0}\\img\\unknow.png", ImageFolderRoot);

            MemoryStream ms = new MemoryStream(File.ReadAllBytes(imageTemp));
            ImageSourceConverter imageSourceConverter = new ImageSourceConverter();
            Thumbnail = (ImageSource)imageSourceConverter.ConvertFrom(ms);
            this.NotifyPropertyChanged("Thumbnail");
            return Thumbnail;
        }

Then, I saw a better version of MemoryStream which was RecyclableMemoryStreamManager but I also get the same error. Maybe I use it in the wrong way.

Here my code :

 private RecyclableMemoryStreamManager _imageRecyclableMemoryStream;
        public ImageSource ThumbnailLoad()
        {
            var imageTemp = File.Exists(Image) ? Image : string.Format("{0}\\img\\unknow.png", ImageFolderRoot);
            _imageRecyclableMemoryStream = new RecyclableMemoryStreamManager();
            ImageSourceConverter imageSourceConverter = new ImageSourceConverter();
            Thumbnail = (ImageSource)imageSourceConverter.ConvertFrom((RecyclableMemoryStream)_imageRecyclableMemoryStream.GetStream(File.ReadAllBytes(imageTemp)));
            this.NotifyPropertyChanged("Thumbnail");
            return Thumbnail;
        }

Upvotes: 0

Views: 262

Answers (1)

JackSojourn
JackSojourn

Reputation: 364

I think you need to allocate the memory stream only once and use a using block...something like...

private static readonly RecyclableMemoryStreamManager recyclableMemoryStreamManager = new RecyclableMemoryStreamManager();

static void Main(string[] args)
{
    string data = "This is a sample text message.";
    var buffer = Encoding.ASCII.GetBytes(data);

    using (var memoryStream = recyclableMemoryStreamManager.GetStream())
    {
        memoryStream.Write(buffer, 0, buffer.Length);
    }
}

Upvotes: 1

Related Questions