C# 按行写入txt大量数据

打印 上一主题 下一主题

主题 1570|帖子 1570|积分 4710


        在 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 量级的文本数据(具体性能取决于硬件配置)。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小小小幸运

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表