代码之家  ›  专栏  ›  技术社区  ›  Bob Kaufman

C#:按资源分配的相反顺序分配资源是否有优势?

  •  5
  • Bob Kaufman  · 技术社区  · 16 年前

    许多年前,有人告诫我,只要有可能,就要按照与资源分配相反的顺序释放资源。即:

    block1 = malloc( ... );
    block2 = malloc( ... );
    
    ... do stuff ...
    
    free( block2 );
    free( block1 );
    

    5 回复  |  直到 16 年前
        1
  •  5
  •   Reed Copsey    16 年前

    然而,许多创建不佳的库没有进行适当的检查。与资源分配相反地处理资源通常意味着您首先处理依赖于其他资源的资源,这可以防止编写糟糕的库造成问题。(在这种情况下,你永远不会处理一个资源,然后使用一个取决于第一个资源是否存在的资源。)

    这也是一种很好的做法,因为您不会过早地意外处置其他对象所需的资源。

    这里有一个例子:看看数据库操作。在关闭/处理命令(使用连接)之前,您不想关闭/处理连接。

        2
  •  4
  •   Will    16 年前

        3
  •  1
  •   Jeffrey L Whitledge    16 年前

    using(Foo foo = new Foo())
    using(FooDoodler fooDoodler = new FooDoodler(foo))
    {
      // do stuff
      // ...
      // fooDoodler automatically gets disposed before foo at the end of the using statement.
    }
    
        4
  •  0
  •   rama-jka toti    16 年前

        5
  •  0
  •   piers7    16 年前

    http://msdn.microsoft.com/en-us/magazine/bb985010.aspx

    因此,你可以尽可能多地担心你的LIFO处理语义,但如果你泄漏了一个,dispose()将按照CLR喜欢的任何顺序被调用。

    推荐文章