当前位置: 首页 > ops >正文

C# 按行写入txt大量数据

        在 C# 中高效写入大量数据到文本文件时,建议使用 StreamWriter 并逐行写入,避免一次性加载全部数据到内存。以下是完整示例和注意事项:

基础实现

using System.IO;

// 示例:逐行写入 100 万条数据
string filePath = "large_data.txt";

// 使用 StreamWriter 并启用自动刷新缓冲区(或手动控制)
using (StreamWriter writer = new StreamWriter(filePath))
{
    for (int i = 0; i < 1_000_000; i++)
    {
        string line = $"这是第 {i} 行数据";
        writer.WriteLine(line);
        
        // 可选:每写入 N 行手动刷新一次(平衡性能与内存)
        if (i % 1000 == 0) writer.Flush();
    }
}

高性能优化技巧

1、缓冲区设置

通过构造函数指定更大的缓冲区大小(默认 4KB):

using (var writer = new StreamWriter(filePath, append: false, Encoding.UTF8, bufferSize: 65536))


2、异步写入

使用异步方法减少线程阻塞:

using (StreamWriter writer = new StreamWriter(filePath))
{
    for (int i = 0; i < 1_000_000; i++)
    {
        await writer.WriteLineAsync($"异步写入第 {i} 行");
    }
}


3、分批次生成数据

避免在内存中累积全部数据:

foreach (var item in GetLargeDataStream()) // 假设这是你的数据源
{
    writer.WriteLine(ProcessData(item));   // 逐行处理并写入
}


典型问题解决方案

问题1:文件被占用无法访问

原因:未正确释放 StreamWriter 资源
修复:始终使用 using 语句包裹写入操作

问题2:写入速度慢

优化方案:
禁用 AutoFlush(默认 false)
减少不必要的字符串拼接(用 StringBuilder 预处理复杂行)
升级物理磁盘(SSD 比 HDD 快 10 倍以上)

问题3:内存溢出

现象:写入 1GB+ 数据时程序崩溃
解决:确保数据源是流式(IEnumerable)而非全内存集合

高级场景

追加写入现有文件:

using (var writer = new StreamWriter(filePath, append: true)) // 关键参数
{
    writer.WriteLine("----- 这是追加的内容 -----");
}


混合同步/异步写入

var writer = new StreamWriter(filePath);
await writer.WriteLineAsync("Header");  // 异步写开头
writer.WriteLine("Sync Content");       // 同步写主体
await writer.FlushAsync();              // 手动异步刷新

通过以上方法,可在 10 秒内稳定写入 1GB 量级的文本数据(具体性能取决于硬件配置)。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。 

http://www.xdnf.cn/news/8307.html

相关文章:

  • AI与.NET技术实操系列(八):使用Catalyst进行自然语言处理
  • 极大似然估计
  • 2025电工杯:光伏电站发电功率日前预测问题 第二问 基于历史功率的光伏电站日前发电功率预测模型构建思路
  • 用 3D 可视化颠覆你的 JSON 数据体验
  • 持续更新 ,GPT-4o 风格提示词案例大全!附使用方式
  • Android 网络全栈攻略(五)—— 从 OkHttp 拦截器来看 HTTP 协议二
  • C++ vector 深度解析:从原理到实战的全方位指南
  • Flask 会话管理:从原理到实战,深度解析 session 机制
  • leetcode hot100:十一、解题思路大全:回溯(全排列、子集、电话号码的字母组合、组合总和、括号生成、单词搜索、分割回文串、N皇后)
  • C#对象初始化语句:优雅创建对象的黑科技
  • CSS3动画
  • 一些好用的Chrome 扩展程序
  • OpenGL
  • TDengine 高可用——双副本
  • 跟Gemini学做PPT:汇报背景图寻找指南
  • BleachBit:开源系统清理工具,释放空间,保护隐私
  • C#实现List导出CSV:深入解析完整方案
  • 计算机视觉(CV)中的视觉定位与外观检测技术解析
  • vue-table-print 一个强大的Vue 3表格打印工具,支持ElementPlus、Ant Design Vue等主流UI组件库。
  • python学习打卡day34
  • 前端可视化
  • OpenHarmony 4.1版本应用升级到5.0版本问题记录及解决方案
  • 动态规划应用场景 + 代表题目清单(模板加上套路加上题单)
  • 手机IP地址更换的影响与操作指南
  • Leetcode 2792. 计算足够大的节点数
  • 储能电站:风光储一体化能源中心数字孪生
  • Vmware ubuntu22.04 虚拟机 连接Windows主机虚拟串口
  • 【Unity3D】Text组件中换行文本显示异常
  • 频湖脉决全文
  • spring.factories详解