很多年前,有人告诫我,只要有可能,就以与分配资源相反的顺序释放资源。即:
block1 = malloc( ... );
block2 = malloc( ... );
... do stuff ...
free( block2 );
free( block1 );
我想象在 640K MS-DOS 机器上,这可以最大限度地减少堆碎片。在 C#/.NET 应用程序中执行此操作是否有任何实际优势,或者这是一种已经过时的习惯?
最佳答案
如果您的资源创建得很好,这应该无关紧要(很多)。
但是,许多创建不当的库没有进行适当的检查。以与分配相反的方式处置资源通常意味着您首先处置依赖于其他资源的资源——这可以防止编写不当的库引起问题。 (在这种情况下,您永远不会处理资源,然后使用取决于第一个资源的存在的资源。)
这也是一种很好的做法,因为您不会意外地过早处置其他对象所需的资源。
这是一个例子:看一个数据库操作。您不想在关闭/处理您的命令(使用连接)之前关闭/处理您的连接。
关于C#:以与分配相反的顺序处理资源是否有优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1703213/