.net - 明确的控制措施不会将其处置-有什么风险?

标签 .net garbage-collection components dispose

关于以下事实,存在多个线程(abc等):.NET组件容器中的 Clear ()项不处置它们(通过调用Dispose(true))。

恕我直言,最常见的是,应用程序中不再使用Clear-ed组件,因此在从父容器中清除它们后,需要将其明确地处置。

可能是一个好主意,集合的Clear方法具有一个 bool 参数dispose,当该参数为true时,它也会在从列表中删除之前处理​​集合元素?

最佳答案

要求这样的修改是没有意义的,Windows窗体团队已经解散了很久了。它处于维护模式,仅考虑安全问题和操作系统不兼容。

否则,创建您自己的方法来执行此操作就足够简单了:

  public static class ExtensionMethods {
    public static void Clear(this Control.ControlCollection controls, bool dispose) {
      for (int ix = controls.Count - 1; ix >= 0; --ix) {
        if (dispose) controls[ix].Dispose();
        else controls.RemoveAt(ix);
      }
    }
  }

现在您可以编写:
  panel1.Controls.Clear(true);

关于.net - 明确的控制措施不会将其处置-有什么风险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1969705/

相关文章:

c# - 项目 'ClassLibrary1.csproj' 目标 'netstandard2.1' 。它不能被以 '.NETFramework,Version=v4.8' 为目标的项目引用

c# - 当所有对象引用被删除时,异步方法会发生什么?

delphi - 寻找 Delphi 甘特图组件

file - 在 Ember.js 中输入类型 ="file"

ruby-on-rails - 如何确保 ruby​​ 中的大文件(blob)从内存中释放?

javascript - 将焦点设置在第二级引导模式中包含的输入控件上

c# - 如何在 C# 中并行运行任务并选择满足给定条件的第一个结果?

c# - IoC、工厂和构造函数参数

c# - 将非托管和托管 dll 合并为 DotNet 中的单个 dll

performance - 字符串连接的性能比较