【发布时间】:2010-10-21 20:12:28
【问题描述】:
我编写了以下程序,其目的是创建一个给定大小的文件,其中包含一些随机数据。该程序运行良好,并且执行了它应该做的事情。但是,我不明白为什么它会消耗 5GB 的 RAM(请参阅我的任务管理器的屏幕截图)。当我用随机数据编写文件时,我没有创建新对象。我错过了什么?我希望这个程序完全不占用内存。
我现在最大的问题是,在文件生成的中间,机器正在死机......
class Program
{
static void Main(string[] args)
{
CreateFile("test.dat", 10 * 1024 * 1024);
}
public static void CreateFile(string path, long approximativeFileSizeInKb)
{
RandomNumberGenerator randomNumber = RandomNumberGenerator.Create();
byte[] randomData = new byte[64 * 1024];
int numberOfIteration = 0;
randomNumber.GetNonZeroBytes(randomData);
using (FileStream fs = File.Create(path, 64 * 1024))
{
while (numberOfIteration++ * 64 < approximativeFileSizeInKb)
{
fs.Write(randomData, 0, randomData.Length);
}
}
}
}
【问题讨论】:
-
我刚试过你的程序,一开始我看到增加了~1GB。然后内存使用一直保持到最后。
-
Gonzalo - 很高兴听到这个消息...但是仍然有很多 RAM 要写入磁盘?你是 x86 还是 x64?
-
我现在最大的问题是在文件生成的中间,机器正在死机......
-
您能否向我们展示此进程的所有内存相关列,如“进程”选项卡中所示?工作集、页面文件使用等...
-
我不知道内存问题,但我对随机数据很好奇。使用 RandomNumberGenerator 是否有特殊原因,它可能比 System.Random 更慢并且开销更大?此外,您再次重复相同的随机 64 KiB 块并省略空字节,这与加密安全的随机数生成器结合使用似乎有点奇怪。
标签: .net file-io .net-4.0 memory-management filestream