Dart在生成随机数并将其附加到文件中时占用了太多内存

Dart在生成随机数并将其附加到文件中时占用了太多内存,dart,file-io,dart-io,Dart,File Io,Dart Io,我正在做一个项目,涉及生成10亿个随机0/1数字并将其存储在一个文件中。这是我的代码: 导入'dart:io'; 导入“dart:math”; 最终整数计数=100000000; 最终随机数发生器=新随机数(); 最终文件=新文件('./dart/dart.txt'); void main(){ if(file.existsSync()){ deleteSync()文件; } createSync()文件; DateTime before=新的DateTime.now(); IOSink sin

我正在做一个项目,涉及生成10亿个随机0/1数字并将其存储在一个文件中。这是我的代码:

导入'dart:io';
导入“dart:math”;
最终整数计数=100000000;
最终随机数发生器=新随机数();
最终文件=新文件('./dart/dart.txt');
void main(){
if(file.existsSync()){
deleteSync()文件;
}
createSync()文件;
DateTime before=新的DateTime.now();
IOSink sink=file.openWrite(模式:FileMode.append);
for(int i=0;i
它适用于
COUNT=10000
,需要十几毫秒才能生成10000个随机数。然而,当我将计数提高到10亿时,它占用了我大约25GB的RAM,并连续运行了40多分钟。我不得不终止进程,而不是让它继续运行

我怎样才能解决这个问题


另外,我不能更改编程语言,因为使用不同的编程语言生成这些数字是我项目的一个方面。我还使用C++、java、JavaScript、PS、Python等来生成这样大的数据,没有一个遇到这个问题。存储数据的最后一个文件小于1 GB。

请注意,您测量的是计算
计数
随机数的时间,而不是将随机数写入磁盘的时间(因为您忽略了执行
wait sink.flush();wait sink.close();
first)。因此,所用的明显时间不会像预期的那样扩大。我还怀疑当缓冲区太满时,
IOSink
不会自动刷新缓冲区,因此最终会缓冲所有
COUNT
值。您可能应该调用
wait sink.flush()周期性地(例如,每10000次迭代),这有望修复RAM使用情况(如果RAM使用导致分页,也可能有助于延长持续时间)。我意识到并不是
IOSink
不会自动刷新其缓冲区(并且您可以观察到
dart.txt
在没有显式刷新的情况下确实会增长),就是没有偶尔的
等待sink.flush(),您的循环生成数据的速度比写入磁盘的速度快得多,因此
IOSink
最终几乎缓冲了所有数据。