Tag: 内存不足的

如何在Windows Phone 8中释放图像缓存/内存?

在我的Windows Phone 8应用程序中,我有一个带有LongListSelector的页面,该页面绑定到1000个对象的列表,这些对象具有用于image的base64string的属性。 现在要显示图像,我编写了这个转换器,将bas64string转换为stream 。 public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (!value.ToString().Contains(“http://”)) { string str = value.ToString(); byte[] bytes = Converter.FromBase64String(str); using (MemoryStream stream = new MemoryStream(bytes)) { stream.Seek(0, SeekOrigin.Begin); BitmapImage image = new BitmapImage(); image.SetSource(stream); bytes = null; var memoryusage = string.Format(“Memory: {0} bytes”, DeviceExtendedProperties.GetValue(“ApplicationCurrentMemoryUsage”)); Debug.WriteLine(memoryusage); return image; […]

LOH碎片 – 2015年更新

有很多关于.NET LOH的信息,并且已在各种文章中对其进行了解释。 然而,似乎有些文章缺乏一点精确性。 过时的信息 在Brian Rasmussen的回答(2009年),微软的项目经理 ,他说限制是85000字节。 他还告诉我们,有一个更加奇怪的double[]案例,大小为1000个元素。 CLR团队成员Maoni Stephens(MSDN,2008)也提出了相同的85000限制。 在评论中,Brian Rasmussen变得更加精确,让我们知道它可以用85000字节的byte[] –12字节来再现。 2013年更新 Mario Hewardt(“高级Windows调试”的作者)在2013年告诉我们,如果我们告诉它,.NET 4.5.1现在也可以压缩LOH。 由于默认情况下它处于关闭状态,因此问题仍然存在,除非您已经意识到这一点。 2015年更新 我不能再重现byte[]示例了。 使用短蛮力算法,我发现我必须减去24(SOH中的byte[85000-24] ,LOH中的byte[85000-24] ): static void Main(string[] args) { int diff = 0; int generation = 3; while (generation > 0) { diff++; byte[] large = new byte[85000-diff]; generation = GC.GetGeneration(large); } Console.WriteLine(diff); } 我也无法重现double[]语句。 暴力强迫给我10622个元素作为边界(在SOH中为double[10622]在LOH中为double[10622] […]