c# - C#如何处理内存

标签 c# pass-by-reference

我有一个类“skImage”。此类有一个私有(private)变量(具有公开它的公共(public)属性)

private Image _capturedImage;  

该类的构造函数如下所示:

   public skImage(Image captured) {

            _capturedImage = captured;

        }

它还有以下方法:

public bool Invert() {

        Bitmap b = new Bitmap(_capturedImage);

        unsafe {
         //random code not relevant.
        }

        _capturedImage = b;
        b.Dispose();
        return true;
    }

然后它有一个 save() 方法,它只调用:

  _capturedImage.Save(_saveFullLocation);

现在,如果我运行 invert 方法,然后尝试调用 save,它会抛出异常(参数无效)。在谷歌搜索此异常后,我似乎正在处理该图像。我可以看到我在反转方法之后处理“b”。

我的问题是,当我执行 _capturedImage = b 时,这是否意味着两个变量现在都持有对该对象的一个​​引用?我不想那样。我希望 b 被销毁以释放内存,以便 GC 可以收集它。我如何将 b 传输到 _capturedImage 并销毁 b.

谢谢

最佳答案

does that mean both variables now hold one reference to the object?

是的。但是,引用只是引用 - 它不会消耗太多内存。

I want b to be destroyed

您无法销毁引用 - 您只能处置对象本身。

您应该编写以下内容,而不是处理 b:

_capturedImage.Dispose();
_capturedImage = b;

关于c# - C#如何处理内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2074017/

相关文章:

c# - 在 Visual Studio 中隐藏导航栏

c# - Entity Framework 未填充键

c# - 简单的注入(inject)器防止锁定容器

c++ - 带有 *& 参数的函数中的 Const 关键字。

javascript - AngularJS:如何远程获取系统?

c# - 如何在远程计算机上静默安装?

c++ - 为什么我不能修改通过引用传递的 vector ?

c++ - 如何在方法模板中使用模板类型的引用传递参数?

java - 有没有办法传递对象的副本而不是引用 Java 方法

c++ - 访问传递引用对象中传递引用对象的变量