c# - 为什么 C# 垃圾收集器不调用 FileStream 析构函数来释放本机文件句柄
问题描述
c# 具有 FileStream 类并包装 OS 文件句柄。FileStream 具有析构函数,考虑我们从 FileStream 获取实例并忘记它,如果没有任何引用,GC 必须调用它的析构函数并释放 OS 文件句柄,那么为什么它不会发生直到我自己调用它的处置或应用程序终止?
解决方案
FileStream 实现了 IDisposable,这意味着您必须调用 Dispose。请参阅上一个问题我需要处置 FileStream 对象吗?
MS自己告诉你这个https://docs.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());
}
}
推荐阅读
- python - 如何使用 python 访问位于 .jar 文件中的模块?
- networking - 网络地址转换 (NAT) 设备后面可以运行多少设备?
- amazon-web-services - 使用 cloudformation 自动缩放
- python-3.x - 具有 python 多处理的云函数
- python - 特定格式 Python 的当前日期时间
- kubernetes - 多个 Kubernetes 命名空间和单个入口主机
- amazon-web-services - 基于每个用户的 aws 使用计划配额
- discord.js - 尝试为我的不和谐服务器添加图像命令,但它一直说“未定义选项”
- android - RecyclerView 显示在 ConstraintLayout 2.0.0-beta7 上,但 1.1.3
- python - 丢失对列表的更新,在 for 循环中,在循环之外