Why do I get an OutOfMemoryException when I have images in my ListBox?
Oh, I recently killed whole day to make this working!
So the solution is:
Make your Image control free resources. So set the
BitmapImage bitmapImage = image.Source as BitmapImage;
bitmapImage.UriSource = null;
image.Source = null;
as it was mentioned before.
Make sure you virtualize _bitmap on every item of the list. You should load it on demand (LongListSelector.Realized method) and you have to destroy it! It won't going to collect automatically and GC.Collect doesn't work either.
Null reference is not working too :(
But here is the method:
Make 1x1 pixel file. Copy it into assembly and make resource stream from it to dispose your images with 1x1 pixel blank. Bind custom dispose method to LongListSelector.UnRealized event (e.Container handles your list item).
public static void DisposeImage(BitmapImage image)
{
Uri uri= new Uri("oneXone.png", UriKind.Relative);
StreamResourceInfo sr=Application.GetResourceStream(uri);
try
{
using (Stream stream=sr.Stream)
{
image.DecodePixelWidth=1; //This is essential!
image.SetSource(stream);
}
}
catch { }
}
Working for me in LongListSelector with 1000 images 400 width each.
If you miss the 2 step with the data collection you can see the the good results but the memory overflows after 100-200 items scrolled.
ListBox: Out Of Memory Exception on WP8
there is a limit on memory usage for app here is the details. you can find detail here
as you mentioned that you are loading images form API(web API I think). and showing them in list box on some button click and at some point out of memory exception is thrown. now on low memory phone, an app can use upto 150MB of phone memory. when your app exceeds that limit it throws this exception is thrown. what you can do is to remove/dispose previously added images from listbox to release the memory and than add new Images.
You can check the memory limit available to your app by checking the ApplicationWorkingSetLimit value using the DeviceExtendedProperties.GetValue(String) method. For an example of how to do this see How to disable features in apps for lower-memory phones for Windows Phone 8
Hope this helps
When I Add many Items into ListBox, I get OutOfMemoryException . How to modify it?
When you retemplate the ListBox
, you lose data virtualization. So, all your item images are in memory all the time. Can you decrease the size of the images to avoid high memory consumption?
Related Topics
Linq to SQL: Multiple Joins on Multiple Columns. Is This Possible
What Is a Dynamic Language, and Why Doesn't C# Qualify
Operators as Method Parameters in C#
Good Resource to Learn Bdd, Tdd (Ruby , C#, JavaScript)
Signalr(V2.2.0) Ondisconnected Set User Offline
Arkit Body Tracking Using Xamarin and C# Inaccurate
Does C# Have an Equivalent to JavaScript's Encodeuricomponent()
Publishing a Website Is Not Updating My CSS Bundles
Binding Wpf Datagrid Cell Background Colour with Trigger
When Using Iis Express No CSS Applied on a Remote Pc
Webbrowser Control IE8 Compatibility Mode On/Off Switch
Firefox Browser Does Not Reload the Update CSS/Js Files
Read and Write File on Streamingassetspath
How to Install Android APK from Code in Unity
Copy Files from Resources/Streamingassets to Application.Persistentdatapath Upon Installation
A Method for Making Http Requests on Unity iOS
Specified Argument Was Out of the Range of Valid Values. Parameter Name: Site