gpt4 book ai didi

c# - WPF 图像控件内存泄漏

转载 作者:太空狗 更新时间:2023-10-29 23:53:43 25 4
gpt4 key购买 nike

我的程序有很多小图像(图像控件很小,而不是图像本身),我说的很多是指超过 500 张。这些图像是异步生成的,然后分配给Image 控件,之前已初始化。
基本上我的代码执行以下操作:

            filename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format("{0}.JPG", Guid.NewGuid().GetHashCode().ToString("x2")));
converter.ConvertPdfPageToImage(filename, i);
//Fire the ThumbnailCreated event
onThumbnailCreated(filename, (i - 1));

创建图像的代码中没有内存泄漏,我有以下代码:

            string[] files = Directory.GetFiles("C:\\Users\\Daniel\\Pictures", "*.jpg");
for(int i=0; i<files.Length; i++){
onThumbnailCreated(files[i], i);
}

问题依旧。这发生在事件处理程序方法中:

    void Thumbnails_ThumbnailCreated(ThumbnailCreatedEventArgs e, object sender)
{
//Since we generate the images async, we need to use Invoke
this.parent.Dispatcher.Invoke(new SetImageDelegate(SetImage), e.Filename, e.PageNumber);
}

private void SetImage(string filename, int pageNumber)
{
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
//I am trying to make the Image control use as less memory as possible
//so I prevent caching
bitmap.CacheOption = BitmapCacheOption.None;
bitmap.UriSource = new Uri(filename);
bitmap.EndInit();
//We set the bitmap as the source for the Image control
//and show it to the user
this.images[pageNumber].Source = bitmap;
}

对于 468 张图像,程序使用大约 1Gb 的内存,然后就用完了。我的任务甚至可以使用 WPF 来实现还是图像数量太多?也许我的代码有问题?
提前致谢

最佳答案

你应该 freeze these images并设置他们的 width (or height)如果可能,将在应用程序中实际使用:

// ...
bitmap.DecodePixelWidth = 64; // "displayed" width, this improves memory usage
bitmap.EndInit();

bitmap.Freeze();
this.images[pageNumber].Source = bitmap;

关于c# - WPF 图像控件内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13611421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com