为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 C# 垃圾收集器不调用 FileStream 析构函数来释放本机文件句柄

为什么 C# 垃圾收集器不调用 FileStream 析构函数来释放本机文件句柄

C#
慕标5832272 2022-10-23 16:49:19
c# 具有 FileStream 类并包装 OS 文件句柄。FileStream 具有析构函数,考虑我们从 FileStream 获取实例并忘记它,如果没有任何引用,GC 必须调用它的析构函数并释放 OS 文件句柄,那么为什么它不会发生,直到我自己调用它的处置或应用程序终止?
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

FileStream 实现了 IDisposable,这意味着您必须调用 Dispose。请参阅上一个问题我需要处置 FileStream 对象吗?

MS自己告诉你这个https://learn.microsoft.com/en-us/dotnet/api/system.io.filestream?view=netframework-4.7.2

最简单的方法是使用“使用”语句

    using (FileStream fs = File.Create(path))

    {

        AddText(fs, "This is some text");

        AddText(fs, "This is some more text,");

        AddText(fs, "\r\nand this is on a new line");

        AddText(fs, "\r\n\r\nThe following is a subset of characters:\r\n");


        for (int i=1;i < 120;i++)

        {

            AddText(fs, Convert.ToChar(i).ToString());


        }

    }


查看完整回答
反对 回复 2022-10-23
?
不负相思意

TA贡献1777条经验 获得超10个赞

如评论中所述,每当 GC 开始收集时,它都会释放无法访问的对象。然而,为了避免性能问题,GC 在这些条件之一发生之前不会启动。最好不要等待垃圾收集器和我们自己快速处置我们的非托管资源。



查看完整回答
反对 回复 2022-10-23
  • 2 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信