C#生成随机整数写入文件出现数量不足或空白文件问题求助
问题原因与修复方案
核心原因
StreamWriter默认采用带缓冲的写入机制,你调用WriteLine写入的内容会先暂存在内存缓冲区中,只有当缓冲区被填满、或者你主动触发刷写/关闭操作时,内容才会真正写入磁盘文件。你的代码写完所有内容后既没有刷写缓冲区,也没有关闭/释放StreamWriter对象,程序运行结束后缓冲区里未写入磁盘的内容会直接丢失。- 传入参数越小,写入的总数据量越少,越难触发缓冲区自动写盘的阈值,所以小参数时容易生成完全空白的文件,参数大的时候可能只写入了刚好填满缓冲区的部分内容,就会出现总数量少于指定值的情况。
- 同时未释放
StreamWriter还会造成非托管资源泄露,长期运行会占用文件句柄,导致后续操作文件时报占用错误。
修复方案
最推荐的方式是使用using语句包裹StreamWriter的使用逻辑,C#会在using代码块执行结束后自动释放StreamWriter对象,释放时会自动把缓冲区的所有内容刷写到磁盘,无需手动处理:
// 生成随机整数并写入对应文件 static void Randomgen(int Size) { // using语句会自动处理资源释放与缓冲区刷写 using (StreamWriter SW = new StreamWriter("Test.txt")) { Random random = new Random(); for (int i = 0; i < Size; i++) { SW.WriteLine(random.Next(0, int.MaxValue)); } } }
优化建议
- 如果需要生成多个不同体量的测试文件,建议把文件路径也做成入参,避免每次覆盖同一个文件的内容。
- 如果需要短时间内多次调用
Randomgen生成文件,建议把Random实例提到方法外做成类的静态字段,避免因为Random默认取系统时间作为种子,短时间多次实例化生成重复的随机数序列。
内容的提问来源于stack exchange,提问作者Sterling
相关产品推荐
相关产品推荐

