gpt4 book ai didi

c# - c#如何处理内存

转载 作者:行者123 更新时间:2023-11-30 21:22:54 25 4
gpt4 key购买 nike

我有一个类“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 方法之后处理“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

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

你应该这样写:

_capturedImage.Dispose();
_capturedImage = b;

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

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