C# 怎么使用 FileStream 读写大文件_C# FileStream 大文件读写技巧


使用FileStream分块读写可安全处理大文件,避免内存溢出。通过设置4KB-64KB缓冲区,循环调用Read/Write方法逐段处理数据,结合async/await提升I/O性能,合理控制缓冲区大小和对象创建,能高效稳定地操作GB级文件。

处理大文件时,直接一次性读取或写入容易导致内存溢出。C# 中的 FileStream 配合分块读写可以高效安全地操作大文件。关键在于避免将整个文件加载到内存中,而是通过缓冲区逐步处理。

使用 FileStream 分块读取大文件

通过指定缓冲区大小,逐段读取文件内容,适合处理 GB 级别的文件。

  • 设置合适的缓冲区大小(如 4KB ~ 64KB),平衡性能与内存占用
  • 使用 Read 方法循环读取,直到返回值为 0,表示文件结束
  • 可配合 StreamReader 或 BinaryReader 处理文本或二进制数据

示例代码:

using (var fs = new FileStream("largefile.txt", FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: false))
{
    byte[] buffer = new byte[4096];
    int bytesRead;
    while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
    {
        // 处理 buffer 中的 bytesRead 个字节
        ProcessChunk(buffer, bytesRead);
    }
}

使用 FileStream 分块写入大文件

写入时同样应避免一次性写入全部数据,采用缓冲写入方式更稳定。

  • 打开文件时使用 FileMode.Create 创建新文件
  • 每次写入一个数据块,及时释放内存
  • useAsync 可设为 true 实现异步写入(需配合异步模式)

示例代码:

using (var fs = new FileStream("output.dat", FileMode.Create, FileAccess.Write, FileShare.None, bufferSize: 8192))
{
    foreach (var chunk in GetFileChunks())
    {
        fs.Write(chunk, 0, chunk.Length);
    }
}

提升性能的关键技巧

合理配置参数和使用模式能显著提升大文件处理效率。

  • bufferSize 建议设为 4096 的倍数,通常 8KB~64KB 范围内效果较好
  • 对超大文件(>2GB),确保使用 long 类型获取长度,避免 int 溢出
  • 若需频繁随机访问,可结合 Position 属性跳转位置
  • useAsync 设为 true 时,配合 async/await 可提升 I/O 并发能力
  • 避免在循环中创建大量临时对象,减少 GC 压力

基本上就这些。正确使用 FileStream 分块读写,再大的文件也能平稳处理。


# 字节  # access  # ai  # stream  # c#  # 内存占用  # int  # 循环  # FileStream  # 并发  # 对象  # 异步  # position  # 大文件  # 设为  # 也能  # 较好  # 跳转  # 关键在于  # 值为  # 再大  # 容易导致  # 加载 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: How to Properly Use NumPy in VS Code  Mac如何将HEIC图片格式转为JPG_Mac批量转换图片【指南】  如何在Golang中实现微服务负载均衡_Golang负载均衡策略与实现示例  c++如何获取map中所有的键_C++遍历键值对提取所有key的方法  Linux如何安装Tomcat应用服务器_Linux环境部署与端口修改【教程】  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  win11 OneDrive怎么彻底关闭 Win11禁用并卸载OneDrive教程【分享】  c++ stringstream用法详解_c++字符串与数字转换利器  Python与Docker容器化部署实战_镜像构建与CI/CD流程  Win10系统映像怎么恢复 Win10使用系统映像还原电脑【指南】  Win11怎么设置任务栏图标大小_Windows11注册表TaskbarSi修改  Win11如何设置开机自动联网 Win11宽带连接自动拨号【步骤】  本地php环境出现502错误_nginx或apache502badgateway解决技巧【解答】  如何使用Golang sync.Map实现并发安全map_避免锁竞争  Windows11怎样开启游戏模式_Windows11游戏模式开启攻略【方法】  短链接怎么用php递归还原_多层加密链接的处理法【详解】  如何减少Golang内存碎片化_Golang内存分配与回收优化方法  使用类变量定义字符串常量时如何实现类型安全的 Literal 注解  php下载安装后memory_limit怎么设置_内存限制调整【技巧】  如何使用Golang构建简易投票统计功能_Golang投票数据汇总与展示示例  php怎么操作Redis_Redis扩展连接与基本命令使用方法【方法】  Drupal 中 HTML 链接被双重转义导致渲染异常的解决方案  Win10如何更改开机密码_Windows10登录选项更改密码  Python与MongoDB NoSQL开发实战_文档模型与索引优化  如何在 PHP 单元测试中正确模拟带方法的图像处理门面(Facade)  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  Windows10怎么备份注册表_Windows10注册表备份步骤【教程】  如何在 ACF 中正确更新嵌套多层的 Group 字段子字段  Win11怎么查看局域网电脑_Windows 11网络邻居发现设置【技巧】  Win11怎样安装微信开发者工具_Win11安装开发者工具教程【步骤】  如何在 Windows 11 中使用 AlomWare 工具箱  c++获取当前时间戳_c++ time函数使用详解  PythonPandas数据分析项目教程_时间序列透视表应用  Python包结构设计_大型项目组织解析【指导】  c++中的std::conjunction和std::disjunction是什么_c++模板元编程逻辑运算【C++17】  Win11怎么更改输入法顺序_Win11调整语言首选位置【设置】  如何有效拦截拼接式恶意域名的垃圾信息  如何使用Golang安装依赖库_管理模块和第三方包  Win11怎么清理C盘OneDrive缓存_Win11清理OneDrive缓存技巧【方法】  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Win11怎么开启游戏工具栏_Windows11 Xbox Game Bar快捷键  Win11怎么关闭小组件_Win11禁用任务栏天气与小组件方法【设置】  Go 中 defer 语句在 goroutine 内部不返回时不会执行  Win11怎么设置按流量计费_Win11限制后台流量消耗【网络】  Win10怎样清理C盘浏览器缓存_Win10清理浏览器缓存步骤【步骤】  Win11怎么查看显卡显存_查询Win11显卡详细参数方法【步骤】  如何自定义Windows终端的默认配置文件?(PowerShell/CMD)  LINUX的SELinux是什么_详解LINUX强制访问控制系统的入门与配置  Win11怎么关闭系统提示音_Windows11声音方案设为无声教程  Win11怎样安装剪映专业版_Win11安装剪映教程【步骤】 

 2025-12-03

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.