【问题标题】:Dispose and memorystream处置和内存流
【发布时间】:2014-03-17 18:47:08
【问题描述】:

我有以下代码每秒被调用 4 次并更新网格的背景。当我不处理内存流时,内存输出使用量会缓慢增长和下降。 MemoryStream 有一个 Dispose 函数,但是如果我在 Dispose 源位图后调用它,背景只是白色。

我需要处理流吗?如果我这样做了,我做错了什么?

private void Viewer_OnUpdate(object self, Bitmap sourceBitmap, Int32Rect cropArea)
    {
        if (sourceBitmap == null)
        {
            return;
        }

        this.Dispatcher.BeginInvoke(DispatcherPriority.Render,
            new Action(
                () =>
                    {
                        MemoryStream stream = new MemoryStream();
                        sourceBitmap.Save(stream, ImageFormat.Bmp);
                        BitmapImage bitmapImage = new BitmapImage();
                        bitmapImage.BeginInit();
                        stream.Seek(0, SeekOrigin.Begin);
                        bitmapImage.StreamSource = stream;
                        bitmapImage.EndInit();
                        this.GridContainer.Background =
                            new ImageBrush(new CroppedBitmap(bitmapImage,cropArea));
                        sourceBitmap.Dispose();
                    }));
    }

注意:我正在调度,因为调用事件总是来自非 UI 线程

【问题讨论】:

    标签: c# garbage-collection managed


    【解决方案1】:

    来自BitmapImage 的 MSDN 文档(重点是我的):

    如果您愿意,请将 CacheOption 属性设置为 BitmapCacheOption.OnLoad 在创建 BitmapImage 后关闭流。默认 OnDemand 缓存选项保留对流的访问,直到位图 需要,并且清理由垃圾收集器处理。

    【讨论】:

      【解决方案2】:

      首先,您发现如果您处理内存流,位图会受到影响,这意味着您的 ImageBrush 看起来是白色的。所以 - 不要释放内存流。

      其次,更重要的是,您看到的内存消耗模式 - 越来越多的内存,然后突然下降 - 是正常的。这就是垃圾收集器自行决定运行时发生的情况。这根本不是问题。

      所以不要处理内存流,让垃圾收集器完成它的工作,不用担心。

      【讨论】:

      • 所以内存流会因为被管理而被自动处理掉?还是在不再使用图像画笔时将其丢弃?
      【解决方案3】:

      看,也许这个答案会对你有所帮助。

      MemoryStream in Using Statement - Do I need to call close()

      如果您将 MemoryStream 放在 using 语句中,则不需要 Dispose,因为它会自动执行;)

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-25
        • 1970-01-01
        • 2012-04-13
        • 2011-12-30
        • 2021-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多