图像组件上的内存泄漏

时间:2013-10-08 12:22:18

标签: wpf image listbox

我对wpf很新,遇到了以下问题。

我有一个列表框,其中填充了指向存储在系统上的文件的路径。 我正在使用以下代码来完成此操作

    spriteImg.Source = new BitmapImage(new Uri(images));

问题在于,当快速浏览lisbox时,图像更新变得缓慢,直到图像更新需要大约一秒钟。

对于如何克服这个问题的任何建议将不胜感激。

此致

2 个答案:

答案 0 :(得分:0)

// Create the image element.
Image simpleImage = new Image();    
simpleImage.Width = 200;
simpleImage.Margin = new Thickness(5);

// Create source.
BitmapImage bi = new BitmapImage();
// BitmapImage.UriSource must be in a BeginInit/EndInit block.
bi.BeginInit();
bi.UriSource = new Uri(@"/Images/1.jpg",UriKind.RelativeOrAbsolute);

bi.EndInit();
// Set the image source.
simpleImage.Source = bi;

这也可以帮助你:

您可能会考虑使用BitmapCacheOption.None。图像将直接从磁盘读取,而不是缓存在内存中。

如何在内存流中使用示例:

    using (MemoryStream stream = new MemoryStream()) {
        bitmap.Save(stream, ImageFormat.Bmp);

        stream.Position = 0;
        BitmapImage result = new BitmapImage();
        result.BeginInit();
        // According to MSDN, "The default OnDemand cache option retains access to the stream until the image is needed."
        // Force the bitmap to load right now so we can dispose the stream.
        result.CacheOption = BitmapCacheOption.OnLoad;
        result.StreamSource = stream;
        result.EndInit();
        result.Freeze();

    }

答案 1 :(得分:0)

我正在为图像使用内存流。并且通过添加以下行来解决滚动问题

    VirtualizingPanel.VirtualizationMode="Recycling"

感谢您指出我正确的方向@Jehof