【问题标题】:Out of Memory with BitmapImageBitmapImage 内存不足
【发布时间】:2015-07-01 18:43:37
【问题描述】:

我正在尝试开发一个应用来使用 Visual Studio 2013 拍摄和打印照片。

该应用程序分为 2 个项目:

  • 首先是客户端,它会拍摄 4 张照片并发送它们的路径文件。

  • 第二个是服务器。当有联系时,他会展示 4 张照片。 然后用户可以选择一个框架、一个数量并打印他的照片。

加载有问题:

            BitmapImage _img1 = new BitmapImage();
            _img1.BeginInit();
            _img1.CacheOption = BitmapCacheOption.OnLoad;
            _img1.UriSource = new Uri(_images[0]);
            _img1.EndInit();
            img1.Source = _img1;

            BitmapImage _img2 = new BitmapImage();
            _img2.BeginInit();
            _img2.CacheOption = BitmapCacheOption.OnLoad;
            _img2.UriSource = new Uri(_images[1]);
            _img2.EndInit();
            img2.Source = _img2;

            BitmapImage _img3 = new BitmapImage();
            _img3.BeginInit();
            _img3.CacheOption = BitmapCacheOption.OnLoad;
            _img3.UriSource = new Uri(_images[2]);
            _img3.EndInit();
            img3.Source = _img3;

            BitmapImage _img4 = new BitmapImage();
            _img4.BeginInit();
            _img3.CacheOption = BitmapCacheOption.OnLoad;
            _img4.UriSource = new Uri(_images[3]);
            _img4.EndInit();
            img4.Source = _img4;

我尝试过使用“BitmapCacheOption.OnDemand”。程序启动时,内存消耗为 3Go。几分钟后,它增加到 6Go。

当outofmemoryexception抛出时,它涉及到PresentationCore.dll

我查看了消耗,在程序的每个循环中,消耗增加了0,4Go。

不显示照片,应用是稳定的。

我试过gdi32.dll的Bitmap和BitmapImage,GC.Collect和DeleteObject,问题是一样的。

有没有办法处置所有的资源?

对不起我的英语

【问题讨论】:

  • 您多久创建一次这些图像?您是否正在积极处理它们?
  • 不确定它是否会影响您的问题,但在_img4 部分的代码中您也输入了_img3.CacheOption = BitmapCacheOption.OnLoad;
  • 您是否正在处理任何位图?否则使用的内存量会增长

标签: c# wpf memory-leaks bitmapimage


【解决方案1】:

您正在将整个位图缓存在内存中 - BitmapCacheOption.OnLoad。尝试使用 None 或 OnDemand 而不是 OnLoad。

【讨论】:

    猜你喜欢
    • 2014-10-15
    • 1970-01-01
    • 2011-05-21
    • 2021-12-20
    • 2021-10-29
    • 1970-01-01
    • 2020-03-12
    • 2015-08-11
    • 2019-06-07
    相关资源
    最近更新 更多