【基础】c# FileStream 对象不会自动释放

c# FileStream 对象不会自动释放

      • [1. 使用 `using` 语句](#1. 使用 using 语句)
      • [2. 显式调用 `Dispose` 或 `Close`](#2. 显式调用 Dispose 或 Close)
      • 注意
      • 总结

在 C# 中, FileStream 对象不会自动释放资源。如果没有正确释放,可能导致文件句柄未关闭,从而导致资源泄露。因此,推荐以下两种方式管理 FileStream 的生命周期:


1. 使用 using 语句

using 语句会确保 FileStream 对象在作用域结束时自动释放资源,无论是否发生异常。

csharp 复制代码
using System.IO;

class Program
{
    static void Main()
    {
        string path = "example.txt";

        // 使用 using 确保 FileStream 自动释放
        using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate))
        {
            // 进行文件读写操作
            byte[] data = new byte[] { 1, 2, 3, 4 };
            fs.Write(data, 0, data.Length);
        } // 离开 using 块时自动调用 Dispose()
    }
}

2. 显式调用 Dispose 或 Close

可以显式调用 Dispose 方法或 Close 方法来释放资源(两者作用相同),但需要注意确保在任何情况下都能调用。

csharp 复制代码
using System.IO;

class Program
{
    static void Main()
    {
        string path = "example.txt";
        FileStream fs = null;

        try
        {
            fs = new FileStream(path, FileMode.OpenOrCreate);
            // 进行文件读写操作
            byte[] data = new byte[] { 1, 2, 3, 4 };
            fs.Write(data, 0, data.Length);
        }
        finally
        {
            // 确保资源释放
            fs?.Dispose();
        }
    }
}

注意

  • 在 .NET Core 和 .NET 5+ 中,垃圾回收器最终会调用 FileStream 的析构函数来释放资源,但这通常是不可预测的,可能导致文件句柄在较长时间后才被释放。
  • 正确使用 using 或显式调用 Dispose 是最佳实践。

总结

FileStream 对象不会自动释放资源。为避免资源泄露,应使用 using 语句或显式调用 Dispose 方法来释放文件流资源。

相关推荐
huaqianzkh6 小时前
WinForm C#:循环修改控件UI闪烁卡顿?SuspendLayout / ResumeLayout 与 BeginUpdate 优化
开发语言·ui·c#
用户3721574261351 天前
C# 实现 Excel 单元格保护:锁定公式并允许编辑指定区域
c#·ai编程·编程语言
公子小六1 天前
基于.NET的Windows窗体编程之WinForms数据持久化(1)
windows·microsoft·c#·.net·winforms
三雷科技1 天前
第6章第4节:自定义分词器
开发语言·c#
zhanghaha13141 天前
C# 系列教程_12 字符串 string 保姆级系统教程(面向新手,大量示例 + 原理讲解)
开发语言·数据库·c#
Coder_Shenshen2 天前
罗克韦尔ACD工程归档离线变量树解析
算法·c#
寂寞的船2 天前
【Unity知识速递】第10期 Unity GC 零分配实战:从 UnityEngine.Pool 到手动 GC 控制的全链路优化
jvm·unity·c#·游戏引擎·lucene
1-1=02 天前
C# 数据结构和特殊类型
数据结构·c#·.net·.netcore
波力海苔夹心脆6754 天前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
AI导出鸭PC端4 天前
Perplexity批量导出没有PDF模式?AI导出鸭插件补上最后一块拼图
人工智能·pdf·c#·ai导出鸭