2012-04-18 61 views
6

我非常需要一个随机文件生成器,生成一个真正的随机,不可压缩虚拟文件随机文件生成器(再次!)

我结束了这个delphi代码。它工作,但它是痛苦sloooow

var 
    Buf  : Integer; 
    TheFile : TFileStream; 
begin 
     TheFile := TFileStream.Create(FileName, fmCreate OR fmOpenReadWrite); 
     with TheFile do 
     begin 
      for i := 0 to FileSize do // Iterate 
      begin 
       Buf := Random(999999) * i; 
       WriteBuffer(Buf, SizeOf(Buf)); 
      end; // for 
     end; // with 
end, 

我的问题是:是否有快速随机文件,我可以使用发电机?无论Delphi代码和/或命令行工具都可以接受的,只要:

  1. 我可以毫不手动干预在Windows 运行它(我需要为我的测试中,不干预是允许的)
  2. 这是产生快速
  3. 文件是不可压缩(即压缩生成的文件导致没有节省空间)

编辑对于那些有兴趣,我申请我收到这里made this function的建议,它的速度不够快& 7zip的具有硬时间压缩生成的数据。

+0

剖析你的代码并找出它花费的最多时间。 – japreiss 2012-04-18 19:17:10

+0

他可能更适合使用CryptoAPI填充用于写入文件的缓冲区。有一些C代码 - http://msdn.microsoft.com/en-us/library/aa382048.aspx这是一个很好的起点 – Petesh 2012-04-18 19:18:25

+0

Buf是什么类型?我是什么类型的?终止是否应该是'FileSize-1'? – 2012-04-18 19:21:07

回答

9

使用4096个字节的页面大小或多个页面大小的缓冲区。一次写入一个整数将会很慢。

+0

同意。这里的问题是I/O。 – 2012-04-18 20:14:06

+5

@ChrisThornton事实上,它不会是I/O将成为瓶颈,而是调用'WriteFile'的开销。操作系统将有一个缓冲层。 – 2012-04-18 20:19:35

1

您可以使用我的generate_random_file.py脚本(Python 3)来生成我的项目中的测试数据。

  • 它适用于Linux和Windows。
  • 它速度非常快,因为它使用os.urandom()来生成256 KiB块的随机数据,而不是分别生成和写入每个字节。
+0

@威尔:你怎么敢把这个垃圾邮件称为?是的,我已经在3个相关问题中发布了这个答案,但这通常被认为是可以接受的(http://meta.stackexchange.com/questions/17455/is-it-ok-that-i-just-posted-my -same回答到几个相关-问题)。如果你想让我改进我的答案,那么告诉我为什么。简单地删除它是不好的做法。 – robert 2013-02-05 14:20:26