讲师中心 微信公众号

工具推荐

视频效率加速
Laper
Laper

剧本策划到成片协作

AniShort
AniShort

AI短剧协同制作平台

updream

一键生成高质量推广成片

剧云
剧云

中文短剧剧本制作平台

C#生成随机内容的大文件 C#如何快速创建一个用于测试的大文件

落瑶大大_8182

落瑶大大_8182

发布时间:2026-02-28 10:38:00

|

1049人浏览过

|

来源于php中文网

原创

最稳方式是用FileStream配合Random.NextBytes直接写入随机字节,禁用缓冲或设大缓冲(如64KB),避免字符串分配与编码开销,适用于纯占位测试文件。

c#生成随机内容的大文件 c#如何快速创建一个用于测试的大文件

用 FileStream 配合 Random.NextBytes 写入二进制数据最稳

直接写入随机字节比拼接字符串再编码快得多,避免字符串分配、编码转换和 GC 压力。适用于需要纯占位、不关心内容语义的测试文件(如压力测试磁盘 I/O、上传下载)。

关键点:

  • FileStream 必须用 FileMode.Create + FileAccess.Write,禁用缓冲(bufferSize = 0)或设为大块(如 64 * 1024)能提升吞吐
  • Random.NextBytes 生成的是 byte[],直接写入,不经过任何中间字符串
  • 别用 File.WriteAllText 或 StreamWriter——它们默认 UTF-8 BOM + 编码开销,1GB 文件可能慢 3–5 倍
var sizeInBytes = 1L << 30; // 1 GB
using var fs = new FileStream("test.bin", FileMode.Create, FileAccess.Write, FileShare.None, 64 * 1024, FileOptions.WriteThrough);
var buffer = new byte[64 * 1024];
var rand = new Random();
long written = 0;
while (written < sizeInBytes)
{
    rand.NextBytes(buffer);
    int toWrite = (int)Math.Min(buffer.Length, sizeInBytes - written);
    fs.Write(buffer, 0, toWrite);
    written += toWrite;
}

要生成可读文本内容?用 Span<char></char> + RNGCryptoServiceProvider 更安全且可控

如果测试场景要求“看起来像日志”或“含字母数字”,又不想被 Random 的可预测性坑(比如并发多次调用产生重复序列),就该换加密级随机源,并绕过 string 分配。

常见错误:用 new string(...) 拼 10MB 日志行——瞬间触发大对象堆分配和 GC 暂停。

C#
C#

"避开 C# 常见错误——空陷阱、异步陷阱、LINQ 陷阱及资源泄漏。"

下载
  • RNGCryptoServiceProvider(.NET 6+ 推荐 RandomNumberGenerator)保证不可预测性
  • Span<char></char> 在栈上操作字符数组,避免堆分配
  • 字符集用 "abcdefghijklmnopqrstuvwxyz0123456789" 这类固定池,查表比 Next(0, 36) 更快
var chars = "abcdefghijklmnopqrstuvwxyz0123456789".AsSpan();
var buffer = stackalloc char[8192];
using var rng = RandomNumberGenerator.Create();
for (long i = 0; i < lineCount; i++)
{
    for (int j = 0; j < buffer.Length; j++)
    {
        var b = new byte[1];
        rng.GetBytes(b);
        buffer[j] = chars[b[0] % chars.Length];
    }
    // 直接 Write(Encoding.UTF8.GetBytes(buffer)) 或用 StreamWriter with leaveOpen=true 复用流
}

超大文件(>10GB)注意 FileOptions.LargeFile 和稀疏文件支持

Windows 上创建几十 GB 文件时,默认行为会真正写满所有块,耗时长且填满磁盘。若只是占位、后续才填充,启用稀疏文件更高效。

  • 先用 FileStream 创建文件,调用 SetLength 扩容,再用 DeviceIoControl(P/Invoke)标记为稀疏(仅 Windows)
  • .NET 6+ 可直接用 FileOptions.LargeFile 提示系统优化缓存策略,但不等价于稀疏
  • Linux/macOS 无原生稀疏标记,但 truncate 命令(或 FileStream.SetLength)本身就会创建空洞文件

注意:SetLength 后不写入任何数据,文件在磁盘上实际占用接近 0 字节——但某些测试工具(如 du -h)会显示逻辑大小,ls -l 显示的是 apparent size。

别忽略 FileOptions.WriteThrough 和 FileOptions.SequentialScan

这两个标志对性能影响明显,但文档里藏得深,容易被跳过。

  • FileOptions.WriteThrough 绕过系统页缓存,直接落盘(适合测真实磁盘写速),否则 Write 调用返回时数据可能还在内存中
  • FileOptions.SequentialScan 告诉 OS 你将顺序读写,让预读/缓存策略更激进(尤其在反复生成多个大文件时)
  • 混用 WriteThrough 和小 buffer(如 4KB)会导致大量短 I/O,反而拖慢——buffer 至少 64KB 起步才合理

真正卡住的往往不是算法,而是没关缓存或 buffer 太小;实测中,同样 5GB 文件,buffer 4KB vs 1MB + WriteThrough,耗时差 7 倍以上。

热门AI工具

更多
SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7299

2023.08.02

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1898

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

3084

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6324

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

6389

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

7934

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

12174

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

6299

2025.07.29

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

40

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn