c# - 当我们从 `using` block 中的方法返回时,内存是如何处理的?

标签 c# memory-management

考虑以下代码:

public Bar GetBar()
{
    using(var foo = new Foo())
    {
        return foo.Bar;
    }
}

这是泄漏,还是调用了 foo.Dispose()?是否有可能由于 foo 被释放而导致返回值无效?

最佳答案

此处的答案接近但不完整且不一致。

Is this leaky, or is foo.Dispose() called?

Dispose 被调用。 using block 被转换为 try/finally block ,其中 foo 中处理最后部分。 finally 将在 try 完成后(无论是异常还是自然地)以及返回给调用者之前被调用。所以 Dispose 几乎在所有情况下都会被调用(除非出现非常严重的异常,例如内存不足、线程中止等)

Is it possible that the return value is invalid as a result of foo being disposed?

当然,如果 Dispose 做了一些事情使 Bar 引用的对象无效,那么是的,它肯定会返回一个“无效”引用。但这必须在 Foo显式。处置对象不会自动处置所有属性。

关于c# - 当我们从 `using` block 中的方法返回时,内存是如何处理的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37735312/

相关文章:

c# - .NET Volatile.读/写和互锁范围

c# - 在 Windows 8 中使用 C# 的 WinRT 中的磁盘空间

c# - 设置 FlowDocument 表格单元格的值

c# - 在多个线程之间拆分循环

c# - 通过表达式树从嵌套类获取静态字段

c - 测试内存碎片

java - Android java、位图变量内存使用

Java 对象内存使用 - ibm jvm 1.4.2

javascript - C# 和 Javascript 之间的性能和内存差异?

c++ - 如何释放 Kiss FFT 分配的内存?