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

问题描述 投票:-1回答:2

c#具有FileStream类并包装OS文件句柄。 FileStream有destructor,考虑我们从FileStream获取实例并忘记它,如果没有任何参考,GC必须调用它的析构函数并释放OS文件句柄,为什么它不会发生untile我自己称之为dispose或应用程序终止?

c# garbage-collection destructor filestream
2个回答
1
投票

FileStream实现了IDisposable,这意味着你必须调用Dispose。请参阅上一个问题Do I need to dispose the FileStream object?

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

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

    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());

        }
    }

0
投票

如评论中所述,每当GC开始收集它时,它将释放无法访问的对象。但是,为避免性能问题,GC才会启动,直到其中一个conditions发生。最好不要等待垃圾收集器,我们自己快速处理我们的非托管资源。

© www.soinside.com 2019 - 2024. All rights reserved.