2012-04-18 60 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