我什么时候需要管理托管资源?

2023-12-23

我一直在研究标准的 Dispose 模式,我只是想知道我需要编写什么来释放托管资源?如果这些资源已经被“管理”,那么我肯定不需要做任何事情。

如果是这种情况,并且我的类不包含任何非托管资源(因此不需要通过 GC 来完成它),那么我是否只需要在 Dispose 方法中抑制完成? :-

public void Dispose()
{
   GC.SuppressFinalize(this);
}

假设这是我的课:

public sealed class MyClass : IDisposable
{
    IList<MyObject> objects; // MyObject doesn't hold any unmanaged resource
    private bool _disposed;

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    private void Dispose(bool disposing)
    {
        if (!_disposed)
        {  
            // do I need to set the list to null and 
            // call Dispose on each item in the list?
            if (disposing)
            {
                foreach (var o in objects)
                    o.Dispose();

                objects = null;
            }
        }

        _disposed = true;
    }

    ~MyClass()
    {
        Dispose(false);
    }
}

我真的需要在这里释放托管资源吗?

Thanks,


如果你的班级有任何IDisposable实例,您正在使用托管资源,因此您应该实施IDisposable允许用户处置资源。你的Dispose方法应该调用Dispose在托管资源上。

至于释放托管内存,您不需要执行任何操作。这是由 GC 处理的,但这是由 GC 处理的唯一清理部分。托管和非托管资源必须通过以下方式清理:Dispose和/或终结器。

如果您不使用任何托管或非托管资源,则无需实现IDisposable也不是终结器。实现终结器实际上会影响类型的性能,因此除非需要,否则不要实现它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我什么时候需要管理托管资源? 的相关文章

  • 如何制作抗崩溃的ios应用程序

    我现在正在编写 ios 应用程序一段时间 但我的应用程序仍然经常崩溃 并且需要时间才能使它们变得非常稳定 我觉得这很烦人 那么 有没有关于防崩溃编程ios应用程序的编程模式呢 打开编译器警告 删除所有警告 运行静态分析器 删除所有警告 使用
  • 不同文件中的相同静态变量[重复]

    这个问题在这里已经有答案了 HI 欢迎大家回答这个问题 Q1 如果 File1 c 包含 static int a File2 c 包含 static int a 如果这两个文件是同一项目的一部分 如果是的话 编译会抛出任何错误吗 如果它不
  • 进入嵌入式[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 忽略父进程中的信号

    我正在尝试实现一个 shell 程序 我希望 shell 程序忽略 SIG INT ctrl c 但在我的程序中 子进程也会忽略 SIG INT 信号 但它不应该这样做 因为 exec 应该将子进程带到另一个程序 并且该程序默认情况下应该处
  • C# SMO 远程数据库备份到本地机器

    我有一个执行 SQL 数据库备份和恢复的应用程序 这在本地计算机上运行良好 但是如果我针对另一台计算机上托管的 SQL 服务器运行此应用程序 则会出现以下错误 Microsoft SqlServer Management Smo Faile
  • 有没有办法使用 ews c# 确定电子邮件是否是回复/响应?

    我正在编写一个支持系统 这是我第一次使用 EWS 到目前为止 我已经相当成功了 我可以提取我需要的信息 发送电子邮件 一切正常 我确实有点头疼 有没有办法判断电子邮件是否实际上是回复 该应用程序的基本思想是有人发送电子邮件 我们回复并给他们
  • 使用标准范围连接带有分隔符的字符串范围

    我想使用范围将跨度中包含的四个字节转换为字符串 这是输入和输出的示例 std span
  • 隐式转换和编译器的不同行为

    Motivated by this question https stackoverflow com q 51972738 5800831 I created the following code struct X X int struct
  • 如何检查我的程序是否有数据通过管道传输到其中

    我正在编写一个应该通过标准输入读取输入的程序 所以我有以下结构 FILE fp stdin 但是 如果用户没有将任何内容通过管道传输到程序中 这就会挂起 我如何检查用户是否确实将数据通过管道传输到我的程序中 例如 gunzip c file
  • 如何声明返回相同类型的 Func Delegate 的 Func Delegate?

    我想编写一个方法 该方法可以完成一些工作 并最终返回另一个与原始方法具有相同签名的方法 这个想法是根据前一个字节值顺序处理字节流 而不进行递归 通过这样调用它 MyDelegate executeMethod handleFirstByte
  • 通用 lambda 的数量

    可以通过访问非泛型 lambda 的数量来推断其数量operator template
  • 使用智能指针在大型对象集合中创建多个索引

    我正在为一个大型对象集合创建多个索引 即使用不同的键 对象可以改变 集合可以缩小和增长 到目前为止我的想法 保留某种指向对象的指针的多个集合 使用set代替map以获得更好的封装 使用 unordered set 可以很好地扩展大型数据集
  • 如何使用 C# 以编程方式识别对方法的引用数量

    我最近继承了需要一些修剪和清理的 C 控制台应用程序 长话短说 该应用程序由一个包含超过 110 000 行代码的类组成 是的 单个类中有超过 110 000 行 当然 该应用程序是我们业务的核心 全天候运行更新动态网站上使用的数据 尽管我
  • 丰富的领域模型和 ORM

    Martin Fowler 认为贫血领域模型是一种反模式 将持久性模型作为域模型进行滚动似乎也严重偏离 因为对象关系阻抗不匹配 http en wikipedia org wiki Object Relational impedance m
  • 使用 System.Windows.Forms.Timer.Start()/Stop() 与 Enabled = true/false

    假设我们在 Net 应用程序中使用 System Windows Forms Timer 在计时器上使用 Start 和 Stop 方法与使用 Enabled 属性之间有什么有意义的区别吗 例如 如果我们希望在进行某些处理时暂停计时器 我们
  • nVidia 和 ATI 之间的 OpenGL 渲染差异

    最近 我将 ATI 驱动程序 我使用的是 HD7970 更新为最新版本 但我的 OpenGL 项目的一些对象停止工作 更重要的是 他们适用于 nVidia 最新驱动程序 在 960m 上测试 ATI 和 nVidia 渲染管道之间有什么我应
  • 我的 C 程序无法运行,并显示“无法执行二进制文件:Exec 格式错误”

    我刚刚从 C 开始 我试图编译下面的代码并执行它 但出现错误 也在运行sizeBS 或数据堆栈中没有显示任何内容 include
  • 您可以从 AuthorizeAttribute 返回 HTTP 响应而不引发异常吗?

    我在各种控制器上使用 AuthorizeAttribute 可能需要根据请求本身的某些属性返回 403 或 429 请求过多 我完全在自定义 OnAuthorization 实现中实现了它 然后在必要时抛出一个带有适当响应代码的新 Http
  • 即使没有任何转换,也违反了 C 中的严格别名?

    How can i and u i在此代码中打印不同的数字 即使i定义为int i u i 我只能假设我在这里触发了 UB 但我不知道具体是如何触发的 ideone演示 http ideone com Gcv5Xm如果我选择 C 作为语言
  • 删除指针后将其设为 NULL 是一个好习惯吗?

    我首先要说的是 使用智能指针 您将永远不必担心这个问题 下面的代码有什么问题 Foo p new Foo use p delete p p NULL 这是由答案和评论 https stackoverflow com questions 19

随机推荐

  • C++ 中的 ::* 是什么?

    当我面对时 我正在阅读基本的 C 教程 在下面的代码中 我可以知道那是什么吗 class A public protected int i class B public A friend void f A B void g A void f
  • 使用 ImageMagick 转换颜色(不是图像)

    更具体地说 我想准确地转换 CMYK 值 可能来自ISO Coated v2空间 到 RGB 值 可能来自sRGBspace 在 Ruby 平台上 可能使用 ICC 配置文件 ImageMagick 似乎是一个不错的起点 但我也听说 Lit
  • 将 JsonObject 转换为字符串

    data map allowNestedValues true create 2012 12 11 15 16 13 title test201212110004 transitions msg success code 0 上面是一个Js
  • 如何从车把模板访问骨干模型的计算字段?

    我想从模板访问我在模型 backbone js 中实现的计算字段 我是否总是需要定义一个助手来完成它 我认为问题与我将模型传递给模板的方式有关 如果我传递 this model toJSON 我可以访问属性 但不能访问我在其中定义的函数 如
  • “is” - 类型运算符

    我使用 is 运算符来查找某个类 for int i 0 i
  • 使用 CXF 上传多个文件和元数据

    我需要使用 CXF 创建一个文件上传处理程序作为 REST Web 服务 我已经能够使用如下代码上传带有元数据的单个文件 POST Path uploadImages Consumes MediaType MULTIPART FORM DA
  • ChartJS 图表未在选项卡内生成

    我正在尝试在选项卡系统中使用 ChartsJS 第一个选项卡中的第一个图表会呈现 但后续图表不会呈现 我相信这是因为标签有display none 因此当第一次生成图表时 它们是在维度为零的 div 中创建的 这解决了问题 但破坏了选项卡
  • 如何从水晶报表字符串和整数字段中删除逗号

    如何从水晶报表字段中删除逗号 我有一个字段名称 year 其值为2012 但是当我在水晶报告中显示该值时 它包含一个逗号 变成2 012 怎么才能只显示2012 在水晶报表设计器视图中 鼠标右键单击该字段 然后选择Format object
  • 如何查找给定路径是绝对/相对路径并将其转换为绝对路径以进行文件操作?

    我正在 javascript jscript 中编写一个小 Windows 脚本 用于查找正则表达式与我通过操作文件获得的字符串的匹配项 文件路径可以是相对路径或绝对路径 如何查找给定路径是绝对 相对路径并将其转换为绝对路径以进行文件操作
  • 如何在 Android 模拟器中下载 Google Play 服务?

    我想在我的应用程序中使用 Google Play 服务 API 但是当我打开模拟器来测试我的应用程序时 它会向我发送一条消息 提示 必须下载 Google Play 服务 我知道会发生这种情况 因为我在我的代码中编写了这个测试MainAct
  • 如何将 NSString 转换为数组?

    例如 我读取了这样的数据 a tbcd tttte tjjjd tnjnjnjd tss tee 我想制作一个像这样的数组 a bcd ttte jjjd njnjnjd ss ee 我怎样才能这样做呢 谢谢 您可以使用 component
  • 如何将 groovy dsl 脚本从一个 groovy 文件包含到另一个文件

    我使用 groovy 脚本中的方法创建了一个自定义 dsl 命令链 我在从另一个 groovy 文件访问此命令链时遇到问题 有没有办法实现功能 我尝试过使用 evaluate 它能够加载groovy文件 但它无法执行命令链 我尝试过使用 G
  • 使用 jquery 函数添加/删除类

    我有这个代码 CSS body font family Verdana Geneva sans serif font size 14px slidingDiv height 300px background color 99CCFF pad
  • 在 Github 中找不到 api 令牌

    我刚刚安装了 GitExtension 一切都已配置完毕 当我单击 克隆 Github 存储库 时 它会打开一个标题为 Github 配置 的对话框 其中包含以下输入框 1 用户 2 密码 3 API令牌 当我点击 获取 Api 令牌 按钮
  • Subversion 分支/主干最佳实践 - 保持分支最新?

    我的开发团队已经使用 Subversion 工作了一段时间了 主干和分支的管理方式如下 我们 几乎 总是从后备箱释放 每个版本都有自己的分支 当一个版本准备好进行 QA 时 我们将分支合并回主干 并为下一个版本创建一个新分支 开发人员可以在
  • 尝试使用 libtomcrypt 库(rsa 公钥生成)时出现 Contiki mote 类型创建错误

    我正在尝试使用 libtomcrypt 库为我的学校项目进行 RSA 公钥生成 但我无法使用 Contiki OS 在 Cooja 中加载该库 我尝试将我需要的文件编译成目标文件并将其加载到 csc file 这是我收到的错误消息 se s
  • 如何使用自定义视图android保存绘图?

    我正在使用以下代码 我在保存图像时遇到问题 我能够保存位图 但是当保存 bimap 时 它也保存了我也用黑色擦除了油漆 public class FingerPaint extends GraphicsActivity implements
  • 尝试从 R 中的数据框创建条形图[重复]

    这个问题在这里已经有答案了 我想更好地可视化我使用 barplot 函数在 R 中创建的一组数据 但是 我不确定如何根据数据框中的两列来执行此过程 我的数据框的名称 myData 以下是我的数据框的内容 States Churn 1 AK
  • Pyspark Dataframe 将函数应用于两列

    假设我有两个 PySpark DataFramedf1 and df2 df1 a 1 2 5 df2 b 3 6 我想找到最接近的df2 b 每个的价值df1 a 并将最接近的值添加为新列df1 换句话说 对于每个值x in df1 a
  • 我什么时候需要管理托管资源?

    我一直在研究标准的 Dispose 模式 我只是想知道我需要编写什么来释放托管资源 如果这些资源已经被 管理 那么我肯定不需要做任何事情 如果是这种情况 并且我的类不包含任何非托管资源 因此不需要通过 GC 来完成它 那么我是否只需要在 D