我正在创建一个指定大小的文件 - 我不关心它中的数据,虽然随机会很好.目前我这样做:
        var sizeInMB = 3; // Up to many Gb
        using (FileStream stream = new FileStream(fileName, FileMode.Create))
        {
            using (BinaryWriter writer = new BinaryWriter(stream))
            {
                while (writer.BaseStream.Length <= sizeInMB * 1000000)
                {
                    writer.Write("a"); //This could be random. Also, larger strings improve performance obviously
                }
                writer.Close();
            }
        }
这不是有效的,甚至是正确的方法.更高性能的解决方案?
感谢所有的答案.
对2Gb文件的以下方法进行一些测试(以ms为单位的时间):
byte[] data = new byte[sizeInMb * 1024 * 1024];
Random rng = new Random();
rng.NextBytes(data);
File.WriteAllBytes(fileName, data);
N/A - 2Gb文件的内存不足
byte[] data = …对于正在进行的网络实验,我需要任意大小的图像文件。
我不知道如何创建此类文件。我需要JPEG,PNG和PDF格式的5MB,10MB和20MB文件。
在我第一次尝试生成这些文件时,很明显,由于这些格式的压缩方案,仅指定空白文件的分辨率就不可能(或者至少我不知道如何)生成任意大小的文件。
有没有一种快速(编程的)方法可以生成这些文件?
编辑:我正在研究创建任意大小的虚拟文件,但是如果有一种方法可以创建具有正确内部格式的实际JPEG,PNG或PDF,那将是理想的选择。
这个问题是根据这个主题: 在c#中在几秒钟内创建一个巨大的虚拟文件
我刚刚检查了xp/vista/7中的fsutil.exe,将大量虚拟数据写入存储磁盘,与编程方式相比,编写这么大的文件所需的时间更少.
当我在.net的帮助下尝试做同样的事情时,它将比fsutil.exe花费更多的时间.
注意:我知道.net不使用本机代码,因为我刚刚使用native api检查了这个问题,如下所示:
long int size = DiskFree('L' - 64);
const char* full = "fulldisk.dsk";
__try{
Application->ProcessMessages();
HANDLE hf = CreateFile(full,
                       GENERIC_WRITE,
                       0,
                       0,
                       CREATE_ALWAYS,
                       0,
                       0);
SetFilePointer(hf, size, 0, FILE_BEGIN);
SetEndOfFile(hf);
CloseHandle(hf);
}__finally{
    ShowMessage("Finished");
    exit(0);
答案和.net结果一样平等.
但是在fsutil.exe的帮助下,它只需要比上面更短的持续时间或.net方法说它快2倍
例如:对于使用.net写入400mb,使用fsutil.exe大约需要大约20秒或更少,大约需要40秒.
那有什么解释吗?或哪个函数fsutil.exe确实使用具有这种显着速度的函数?