我记得我是通过将图像从网络直接流式传输到位图中来加载图像的。关闭流,返回位图并将其保存在图像控件中。
我异常(exception),当我执行 = loadPicture() 时,第一个位图将被释放,就像智能指针在 C++ 中所做的那样。但它没有,在我调用 dispose 之前我消耗了很多 ram。所以我的问题是。
GC 和 Dispose able 对象在 C# 中如何工作?为什么它不像 smart_ptr 那样实现?
最佳答案
引用不是智能指针。让引用变量超出范围,将其替换为另一个值,和/或将其设置为 null 都完全没有。
这只是 CLI/GC 设计的一部分...
垃圾回收 (GC) 将在需要时 运行,并且应该清理使用的托管内存,以及(如果提供终结器)任何非托管资源。但是对于确定性清理:这就是 IDisposable
的全部目的。当你完成这些对象时,你的工作是 Dispose()
- 通过 using
,或者将它交给承担这个责任的其他东西(常见的,对于例如,流/读者等)。
using (StreamReader reader = new StreamReader(myfile)))
{
...
}
关于c# - GC 和 IDispose 在 C# 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/780834/