C#:以与分配相反的顺序处理资源是否有优势?

标签 c# resources dispose fragmentation

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

block1 = malloc( ... );
block2 = malloc( ... );

... do stuff ...

free( block2 );
free( block1 );

我想象在 640K MS-DOS 机器上,这可以最大限度地减少堆碎片。在 C#/.NET 应用程序中执行此操作是否有任何实际优势,或者这是一种已经过时的习惯?

最佳答案

如果您的资源创建得很好,这应该无关紧要(很多)。

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

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

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

关于C#:以与分配相反的顺序处理资源是否有优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1703213/

相关文章:

c# - 在c#中从数据库生成脚本

c# - 如何在 Windows 应用商店 XAML/C# 应用程序中播放音频剪辑

c# - c#有哪些预定义的#if符号?

java - Gradle 不会复制测试资源来构建

c# - 在处理方法中删除委托(delegate)成员时可以使用等于赋值吗?

mvvm - 未使用MEF和MVVM处理Silverlight ChildWindow

c# - 是否有可能使用单次传递获得列表中的 2 个最大数字?

java.lang.IllegalArgumentException : Invalid URL or resource not found. JavaFX 图像

c++ - 在已编译的 exe 中编辑字符串变量? C++ win32

c# - 如何管理 WinForms UserControl 中的一次性对象?