2012-04-18 16 views
6

मुझे बुरी तरह से एक यादृच्छिक फ़ाइल जनरेटर की आवश्यकता है जो वास्तव में यादृच्छिक, गैर-संपीड़ित डमी फ़ाइलों को उत्पन्न करता है।यादृच्छिक फ़ाइल जेनरेटर (दोबारा!)

मैं इस डेल्फी कोड के साथ समाप्त हुआ। यह काम करता है, लेकिन यह दर्दनाक 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, 

मेरा प्रश्न है: वहाँ एक तेजी यादृच्छिक फ़ाइल जनरेटर है कि मैं का उपयोग कर सकते है? दोनों डेल्फी कोड और/या कमांडलाइन उपकरणों रहे हैं स्वीकार्य जब तक:

  1. मैं बिना मैनुअल हस्तक्षेप विंडोज पर चला सकते हैं (मैं यह मेरा परीक्षण के लिए की जरूरत है, कोई हस्तक्षेप की अनुमति दी है)
  2. यह है तेजी से
  3. फ़ाइलें उत्पन्न गैर संपीड़न योग्य (यानी। कोई जगह में उत्पन्न फ़ाइल परिणामों को संपीड़ित बचत)
है

संपादित उन दिलचस्पी के लिए, मैं सलाह मैं यहाँ और made this function प्राप्त आवेदन किया, यह काफी तेजी से & 7zip कठिन समय उत्पन्न डेटा को संपीड़ित है है।

+0

अपना कोड प्रोफ़ाइल और पता लगाएं कि यह सबसे अधिक समय कहां खर्च कर रहा है। – japreiss

+0

वह शायद क्रिप्टोएपीआई का उपयोग करके एक बफर भरने से बेहतर है जो फाइल को लिखने के लिए उपयोग किया जाता है। कुछ सी कोड हैं - http://msdn.microsoft.com/en-us/library/aa382048.aspx यह एक अच्छा प्रारंभिक बिंदु – Petesh

+0

बुफ किस प्रकार का है? मैं किस प्रकार का हूं? क्या समाप्ति 'फाइलसाइज -1' होनी चाहिए? –

उत्तर

9

4096-बाइट पृष्ठ-आकार, या एकाधिक पृष्ठ-आकार, बफर का उपयोग करें। एक समय में एक पूर्णांक लिखना धीमा हो जाएगा।

+0

सहमत हुए। यहां समस्या आई/ओ है। –

+5

@ChrisTornton वास्तव में यह I/O नहीं होगा जो बाधा होगी, लेकिन 'WriteFile' को कॉल करने का ओवरहेड होगा। ओएस में एक बफरिंग परत होगी। –

1

आप मेरी generate_random_file.py स्क्रिप्ट (पायथन 3) का उपयोग कर सकते हैं जिसे मैं अपनी परियोजना में परीक्षण डेटा उत्पन्न करता था।

  • यह लिनक्स और विंडोज दोनों पर काम करता है।
  • यह बहुत तेज़ है, क्योंकि यह प्रत्येक बाइट को अलग-अलग उत्पन्न करने और लिखने के बजाय 256 कीबी के भाग में यादृच्छिक डेटा उत्पन्न करने के लिए os.urandom() का उपयोग करता है।
+0

@Will: आप इस स्पैम को कैसे हिम्मत देते हैं? हां, मैंने इस उत्तर को 3 संबंधित प्रश्नों में पोस्ट किया है, लेकिन इसे आम तौर पर स्वीकार्य माना जाता है (http://meta.stackexchange.com/questions/17455/is-it-ok-that-i-just-posted-my -same-जवाब करने के लिए कई संबंधी-प्रश्न)। यदि आप चाहते हैं कि मैं अपना जवाब सुधारूं, तो मुझे बताएं क्यों। बस इसे हटाना बुरा अभ्यास है। – robert