【问题标题】:Random File Generator (again!)随机文件生成器(再次!)
【发布时间】:2012-04-30 06:31:27
【问题描述】:

我非常需要一个随机文件生成器来生成真正随机的、不可压缩的虚拟文件。

我最终得到了这个 delphi 代码。它有效,但它非常缓慢

 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. 生成的文件不可压缩(即压缩生成的文件不会节省空间)

编辑对于那些感兴趣的人,我应用了我在这里收到的建议和made this function,它足够快而且 7zip 很难压缩生成的数据。

【问题讨论】:

  • 他最好使用 CryptoAPI 填充用于写入文件的缓冲区。有一些 C 代码 - msdn.microsoft.com/en-us/library/aa382048.aspx 这是一个很好的起点
  • @Gdhami - 填满页面大小的缓冲区,然后写入。一次写一个int会很慢,使用:Buf:array [0..2047] of integer;
  • 分配一大块内存。用随机数填充它。然后把它写成一个整体。
  • 如果您需要一次编写小块并且速度仍然很快,您可以使用此处的代码:stackoverflow.com/questions/5639531/…
  • @TheDude 您应该提供your code 作为您问题的答案! (我差点错过了 ;-)

标签: windows delphi random test-data


【解决方案1】:

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

【讨论】:

  • 同意。这里的问题是 I/O。
  • @ChrisThornton 实际上,瓶颈不是 I/O,而是调用WriteFile 的开销。操作系统将有一个缓冲层。
【解决方案2】:

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

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

【讨论】:

  • @Will:你怎么敢说这是垃圾邮件?是的,我已经在 3 个相关问题中发布了这个答案,但这通常被认为是可以接受的 (meta.stackexchange.com/questions/17455/…)。如果您希望我改进我的答案,请告诉我原因。简单地删除它是不好的做法。
猜你喜欢
  • 2017-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
  • 2014-05-21
相关资源
最近更新 更多